STM32堆棧大小及位置

STM32的地址空間映射:spa

 

首先STM32的堆棧是存放在片上靜態SRAM中的,地址分配能夠見Keil的編譯map文件:.net

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)excel

上面節選中, __heap_base 是堆的基地址,__initial_sp  是棧指針 。示意圖以下:blog

堆和棧的大小在啓動文件startup_stm32f2xx.s中設置:內存

Stack_Size  EQU  0x00000400it


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


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


Heap_Size  EQU  0x00000200map


AREA  HEAP, NOINIT, READWRITE, ALIGN=3 
__heap_base

注意:

堆和棧,通常堆是由低地址往上增加,棧是由往下減小。都是連續的,C語言不提供內存保護機制相似的功能,若是一直堆一直增加,棧一直申請,而後就會致使棧溢出,程序崩潰。 ———————————————— 版權聲明:本文爲CSDN博主「qlexcel」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/qlexcel/article/details/78886157

相關文章
相關標籤/搜索