STM32的内存分配情况
STM32的存储结构
flash,SRAM寄存器和输入输出端口被组织在同一个线性地址空间内
C语言分为:堆, 栈 , bss , data , text
STM32以及在MDK里面段的划分
MDK
Code: 存储程序代码
RO-data: 存储const常量和指令 (read-only-data)
RW-data: 存储初始化值不为0的全局变量
ZI-data: 存储未初始化的全局变量或初始化为0的全局变量
FLASH = Code+ RO-data + RW-data
RAM = RW-data + ZI-data
注意:堆和栈也会占用RAM
设置堆栈内存大小
IAR: Project -> option -> Linker -> Config -> Stack/Heap Sizes
Keil:在.s的起始文件进行修改 Stack_Size Heap Size
堆的增长方向向上,栈的增长方向向下,没有固定界限,一旦堆栈冲突,程序就会崩溃
在使用堆栈的过程中一定要确保堆栈的大小以及使用情况
STM32的内存使用情况查询
在STM32编译是会产生 .map文件,如果没有.map文件
Keil: 右击工程名字 -> option -> Output -> List -> Memory Map是否勾选(Keil)
IAR: Project -> option -> Linker -> List -> Generate linker map file