Keil IDE的编译信息在工程文件夹的xx.map文件中,STM32的RAM分区从0x0200 0000开始,静态区、堆、栈。
所有的全局变量,包括静态变量之类的,全部存储在静态存储区。然后是堆区(如没用到malloc,则没有该区),之后是栈区,栈在程序中存储局部的变量。
; Amount of memory (in bytes) allocated for Stack
这里定义了堆栈各自大小,堆:512bytes 栈1k;
所以栈区大小有限制,我们在局部变量中不要定义大数组否则容易溢出。
查看xx.map文件
Removing Unused input sections from the image.就是将库中没有用到的函数从可执行映像中删除掉,减小程序的体积。
HEAP                                      0x20000568   Section      512    startup_stm32f10x_md.o(HEAP)  
STACK                                    0x20000768   Section     1024   startup_stm32f10x_md.o(STACK)  
 __heap_base                         0x20000568   Data           0       startup_stm32f10x_md.o(HEAP)  
 __heap_limit                          0x20000768   Data           0       startup_stm32f10x_md.o(HEAP)  
 __initial_sp                             0x20000b68   Data           0      startup_stm32f10x_md.o(STACK) 
可见分配了堆,大小为512 bytes在栈的下面,这里也可以看出, 堆向上增长,栈向下增长,如果栈分配的空间不足,将会占用堆的空间,malloc时,可能因为堆空间不足,导致不能分配内存。