【单片机】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程序内存组成对比图

相关推荐

  1. 单片机MCU选型

    2023-12-05 15:40:07       38 阅读
  2. 单片机MCU堆栈概念与区别

    2023-12-05 15:40:07       31 阅读
  3. 【嵌入式 - 关于MCU内存分配】

    2023-12-05 15:40:07       8 阅读
  4. 单片机MCU,MPU,SOC的工艺结构原理及选型参数总结

    2023-12-05 15:40:07       19 阅读
  5. 内存管理

    2023-12-05 15:40:07       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 15:40:07       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 15:40:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 15:40:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 15:40:07       18 阅读

热门阅读

  1. CSS进阶

    CSS进阶

    2023-12-05 15:40:07      29 阅读
  2. Kubernetes 使用插件扩展 kubectl

    2023-12-05 15:40:07       43 阅读
  3. Spark_spark shell退出方式

    2023-12-05 15:40:07       34 阅读
  4. golang实现文件上传(高并发+分块+断点续传+加密)

    2023-12-05 15:40:07       40 阅读
  5. 131. 分割回文串

    2023-12-05 15:40:07       33 阅读