说到变量在stm32内存中的分配的有关问题,很少有人关注,关注的人中可以说的清楚里面的关系的又更加少了。
在写这篇博客之前我在网上找到了一些参考的文章:
http://blog.csdn.net/zyboy2000/article/details/7583007 这一篇文章讲的比较通俗易懂,对堆和栈的不同和相互之间的联系说的比较清楚。同时结合stm32划出了堆栈在内存中的地址的分配示意图。
下面引用原作者文章中部分的内容:
"堆和栈位置
通过MAP文件可知
HEAP 0x200106f8 Section 512 startup_stm32f2xx.o(HEAP)
STACK 0x200108f8 Section 1024 startup_stm32f2xx.o(STACK)
__heap_base 0x200106f8 Data 0 startup_stm32f2xx.o(HEAP)
__heap_limit 0x200108f8 Data 0 startup_stm32f2xx.o(HEAP)
__initial_sp 0x20010cf8 Data 0 startup_stm32f2xx.o(STACK)
显然 Cortex-m3资料可知:__initial_sp是堆栈指针,它就是FLASH的0x8000000地址前面4个字节(它根据堆栈大小,由编译器自动生成)
显然堆和栈是相邻的。
图(1)
这一篇博文对于堆栈的理解是十分深刻的,但是不知道是什么原因,可能是因为我使用的是MDK编译器把,在查看xiang