1、存储器
存储器分为易失性和非易失性。
RAM分为SRAM、DRAM
- SRAM:静态RAM,只要上电数据就不会丢失;
- DRAM:动态RAM,需要每隔一段时间刷新数据,否则数据会丢失;
- 最初的ROM只读或可写一次然后只读;
- 后来,发展出电可擦除即EEPROM,从此“ROM只读存储器”只是名义上的只读,实际就是可读可写。EEPROM可对指定字节进入擦除写入。
- 再后来,FLASH闪存出现了,以块为单位擦除,使得存储的数据密度更高,成本更低;
????????FLASH分为Nor FLASH和Nand FLASH:Nor FLASH可以以字节为单位读取,Nand FLASH是以块为单位读取数据;
2、STM32的存储器
2.1、FLASH
2.1.1、STM32的FLASH类型——Nor FLASH
FLASH分为Nor FLASH和Nand FLASH,Nor Flash的数据线和地址线是分开的,Nand FLASH的数据线和地址线是共用的。
这就导致了Nand FLASH存放代码的话,CPU指令译码后无法直接执行,所以STM32的FLASH指的是Nor FLASH;如果要用Nand FLASH存放代码的话,还要有一块Nor FLASH或RAM,用于加载程序执行;
2.1.2、FLASH的结构——STM32F4中文参考手册
2.2、SRAM
3、代码和数据存放的区域
- CODE:指程序中代码即函数体的大小,含未使用的函数;
- RO_DATA:Read Only只读,const常量和字符串常量;
- RW_DATA:Read Write,已初始化的、可读可写的全局变量和静态变量;
- ZI_DATA:未初始化的可读可写全局/静态变量【=0也被认为是未初始化】,堆、栈;
存放在Flash中:BIN文件?= CODE+RO_DATA+RW_DATA?
存放在SRAM中:所有的变量 =?RW_DATA+ZI_DATA
注意,RW_DATA出现了两次,在程序未执行的时候是在Flash中的,程序执行的时候会加载到SRAM当中;
|