STM32堆栈大小及位置

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语言不提供内存保护机制类似的功能,如果一直堆一直增长,栈一直申请,然后就会导致栈溢出,程序崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值