1.堆和棧大小
定義大小在startup_stm32f2xx.s
Stack_SizeEQU0x00000800
AREASTACK, NOINIT, READWRITE, ALIGN=3
Stack_MemSPACEStack_Size
__initial_sp
; Heap Configuration
;Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
Heap_SizeEQU0x00000800
AREAHEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
通過MAP文件可知
棧:向低地址擴展
堆:向高地址擴展
棧:
存函數(shù)的臨時變量,即局部變量,函數(shù)返回時隨時有可能被其他函數(shù)棧用。所以棧是一種分時輪流使用的存儲區(qū),
編譯器里定義的Stack_Size,是為了限定函數(shù)的局部數(shù)據(jù)活動的范圍,操過這么范圍有可以跑飛,也就是棧溢出;
Stack_Size不影響Hex,更不影響Hex怎么運行的,只是在Debug調(diào)試時會提示錯。有的人寫
單片機代碼在函數(shù)里定義一個大數(shù)組 int buf[8192],棧要是小于8192是會死的很慘。
堆:存的是全局變量,這變量理論上是所有函數(shù)都可以訪問的,全局變量有的有初始值,但這個值不是存在RAM里的,
是存在Hex里,下載到Flash里,上電由代碼(編譯器生成的匯編代碼)搬到RAM去的。