STM32在KEIL下的工程堆空间在起始地址在哪里体现?

2019-07-14 16:35发布

上面红 {MOD}标记 STACK 的起始地址为 0x2000be28
在这里有几个疑问:
1、栈空间是向低字节地址方向生长的,我定义的栈空间为16K Bytes,那么栈空间从 0x2000be28 地址向下生长,怎么会跟全局变量的地址write_data_buf 0x2000ba28 的地址重合呢?
2、还有个疑问,就是堆空间在起始地址在哪里体现?我定义的堆空间大小为512字节?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
天微JSB
1楼-- · 2019-07-15 05:43
胡德胜快回答 发表于 2018-10-26 14:37
本帖最后由 Mandelbrot_Set 于 2015-12-24 12:25 编辑

AREA    STACK, NOINIT, READWRITE, ALIGN=3

4、全局变量在编译后,就已经确实,在RAM空间的全局区。
胡德胜快回答
2楼-- · 2019-07-15 11:30
startup.s的作做法大概是
定义1个section,叫STACK.
里面有一个数组(一块ram),叫Stack_Mem[SIZE].
栈的设置要代码实现.
map文件并不知道它是栈(STACK只是名字而已,跟代码对应)
胡德胜快回答
3楼-- · 2019-07-15 16:48
STACK 0x2000be28 Section 16384 startup_stm32f2xx.o
告诉你的是 startup_stm32f2xx.o( startup_stm32f2xx.s)
实现了一个段(section) 名字叫 STACK ,地址 0x2000be28 ,大小16384

这个section当然是[0x2000be28 ,0x2000be28 + 16384]
天微JSB
4楼-- · 2019-07-15 18:27
 精彩回答 2  元偷偷看……
7762642422d
5楼-- · 2019-07-15 18:45
天微JSB 发表于 2018-10-26 15:18
谢谢你的耐心解释,现在彻底弄懂了,因为我用了LWIP的内存分配机制,所有STM32的堆被隐藏了,重新用C标准库,就能看到堆和栈的地址了

能否解释下“LWIP的内存分配机制”?
linlin64812
6楼-- · 2019-07-16 00:02
本帖最后由 role_2099 于 2015-12-25 11:26 编辑

我是进来学习的

一周热门 更多>