STM32的内存分区
1.C语言的内存分为以下几个区
- 代码区:存放函数的二进制代码
- 全局区(又叫静态区):
- 分为bss和data:bbs存放未初始化全局变量和静态变量;data存放已初始化的全局变量和静态变量。
- .bbs段会在代码执行之前,初始化为0。
- 堆区:动态分配的内存,即存放程序员malloc的内存
- 栈区:局部变量,函数入参,返回值
局部常量存在栈中
全局常量存在.data中
2.STM32中的内存分区
-
STM32中,除了代码区和全局区的data段存在FLASH中,其余全部存在SRAM中
-
.data会在运行时,复制到SRAM中,全局常量除外
-
stm32内存分布如下
-
局部常量存在栈区、即sram中
-
全局常量存在全局区的.data即FLASH中
-
keil中内存计算
build之后,build output串口显示以下值,可以通过计算得到SRAM和FLASH占用
RAM = RW-data + ZI-data // SRAM = 已初始化可读写变量 + 未初始化可读写变量
ROM = Code + RO-data + RW-data // FLASH = 代码段 + 常量 + 已初始化可读写变量