STM32堆栈大小及位置

半腔热情 提交于 2020-02-28 06:22:11

STM32的地址空间映射:

 

首先STM32的堆栈是存放在片上静态SRAM中的,地址分配可以见Keil的编译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)

上面节选中, __heap_base 是堆的基地址,__initial_sp  是栈指针 。示意图如下:

堆和栈的大小在启动文件startup_stm32f2xx.s中设置:

Stack_Size  EQU  0x00000400


AREA  STACK, NOINIT, READWRITE, ALIGN=3 
Stack_Mem  SPACE  Stack_Size 
__initial_sp


; Heap Configuration 
;  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> 


Heap_Size  EQU  0x00000200


AREA  HEAP, NOINIT, READWRITE, ALIGN=3 
__heap_base

注意:

堆和栈,一般堆是由低地址往上增长,栈是由往下减少。都是连续的,C语言不提供内存保护机制类似的功能,如果一直堆一直增长,栈一直申请,然后就会导致栈溢出,程序崩溃。
————————————————
版权声明:本文为CSDN博主「qlexcel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qlexcel/article/details/78886157

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!