单片机的内存分布

这次来记录下stm32的内存分布

一般都说RAM和FLASH作为数据存储的地方

一般都有好几个段
.text 代码段,用来存储代码
.data 数据段 储存已初始化的,且初始化不为0的全局变量和静态变量
.bss 储存未初始化的,或初始化为0的全局变量和静态变量
constData :存储只读常量
heap:堆,是被动态分配内存的地方,大小可在启动文件中设置,程序员使用malloc()和free()函数进行分配和释放。
Stack:栈,大小在启动文件中设置,由系统自动分配和释放。可存放局部变量、函数的参数和返回值,中断发生时能保存现场。但是static声明的局部静态变量不储存在栈中,而是放在data数据段。

像RTOS分配的内存空间都在.bss段

3种存储属性
1.RO 存在FLASH中,constData和代码段都在这里
2.RW 储存在RAM中。data属于此区。上电时单片机会将Flash中保存的data类型数据复制到RAM中
3. ZI(Zero Init)
零初始化区,同样储存在RAM里。系统上电时会把此区域的数据进行0初始化。bss,heap,stack均属于这个区域。

地址最低是.text段,然后依次是数据段,.bss段,堆,栈。堆的生长方向是低向高,栈的生长方向是高向低。

程序占用 Flash = Code + RO data + RW data

程序运行时候占用 RAM = RW data + ZI data。

Code + RO data + RW data 的大小也是生成的 bin 文件的大小

下面的博客链接讲的更透彻
STM32的内存管理相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值