【单片机】MCU内存管理

keil中查看内存使用情况

Code-Data,RO-Data,RW-Data,ZI-Data的含义

Code-Data:代码占用的flash大小

RO-Data:[read-only data],只读常量大小(const和#define)

RW-Data:[read write data],初始化了的变量大小

ZI-Data:[zero initialized data],没有初始化的变量,零初始化的可读写变量

Total RW Size (RW Data + ZI Data):总共占用的RAM大小

Total ROM Size (Code + RO Data + RW Data):总共占用的flash大小

写flash断电保存数据的注意事项

因为程序和用户想要单片机记忆的数据都存放在flash上,因此要注意读写flash的部分不能影响到程序区域

原则上:因为程序可能要不断拓展,所以优先用后面的扇区进行读写;比如我用的这款MCU,每个扇区的大小为1KB,一共62个扇区,则可以这样定义起始位置:

理论上:flash的起始地址是0x0800 0000,程序占的总空间是Total ROM Size = 36940,因此,可以从

hex (0x0800 0000 + 36940) = 0x0800 904C 之后就可以读写flash了

FAQ

Q:这里RW-data为什么既占用flash,又占用ram呢?

A:这是因为RAM是随机存取存储器(random access memory),也就是手机上经常说的运行内存,RAM是易失性存储,断电会丢失数据。所以已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM中。

Q:为什么ROM Size不包括ZI Data?

A:这是因为已经初始化的数据,在掉电后需要保存初始值,以便上电运行后重载,因此存在rom中。而ZI Data数据都是0,上电运行后直接清零即可,包含进去反而浪费存储空间。

Q:ROM, FLASH和RAM的区别?

A:

  • RAM是随机存取存储器(random access memory),效率较ROM高,断电丢失数据。
  • ROM是只读存储器(Read Only Memory),它是一种只能读出事先所存的数据的固态半导体存储器。ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。其结构简单,因而常用于存储各种固化程序和数据。
  • Flash(FLASH EEPROM)又称闪存。它是EEPROM的一种。它结合了ROM和RAM的长处。不仅具备电子可擦除可编辑(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据。它于EEPROM的最大区别是,FLASH按扇区(block)操作,而EEPROM按照字节操作。FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因此适合用于做程序存储器。

裸机程序的组成

标准c与stm32程序内存组成对比图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值