【单片机】MCU内存管理

keil中查看内存使用情况

【单片机】MCU内存管理_第1张图片

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程序内存组成对比图

【单片机】MCU内存管理_第2张图片

【单片机】MCU内存管理_第3张图片

你可能感兴趣的:(单片机,嵌入式硬件,c语言)