捋清楚MCU上内存的分类和关系
从功能上进行分类,MCU一共需要两种存储资源:
ROM-用于存储运行程序
Flash闪存
ROM的一种,有RAM和ROM的优势,掉电不会丢失数据,可电擦除数据;
分类:
NORFlash
代码可以直接在NORFlash上运行,NORFlash数据线和地址线分开,可以像RAM实现随机寻址,读取任意一个字节,可以节省SRAM的容量,但是擦除需要按块擦除;
分析:是否NORFlash能够完全替代SRAM?
不能, NORFlash+SRAM一般为互补的组合方案,NORFlash的写入和擦除速度较慢,难以替代SRAM;
NORFlash一般用于存储运行程序,SRAM用于存储需要频繁读写的数据,组合使用;
NandFlash
按块读取擦写,一块一般为512Byte,一般用于存储系统固件和用户配置信息,NAND Flash不支持XIP(eXecute In Place,本地执行)功能。这意味着代码不能直接在NAND Flash中执行,而需要先被加载到RAM中,然后由CPU从RAM中取指、译码和执行。
固态硬盘使用的就是NandFlash
RAM-用于存储程序运行时的数据
按存储器用途分类:
IRAM(指令RAM)
DRAM(数据RAM)注意区别动态DRAM
D/IRAM(既可作指令RAM又可作数据RAM)
按存储器的类型和实现方式分类:
DRAM(Dynamic RAM):动态RAM
数据保留时间短,需要一直进行电路刷新电路才能保存数据,SRAM>速率>ROM,但是比SRAM便宜很多;
SRAM(Static RAM):静态RAM
传输速率很快,只要一直上电就可以保持数据,无需刷新电路,集成度低,贵;
SDRAM(Synchronous Dynamic RAM)同步动态随机存取内存
RTC RAM
PSRAM(Pseudo Static RAM)伪静态随机存储器
按
RAM的分布
片内RAM(ON -Chip-RAM)
片外RAM(Off-Chip-RAM)
SFR-特殊功能寄存器
关于占用 ram 和 rom 空间是如何计算的
ROM计算
Code 段:代表的就是我们所编写的代码所占用的 flash 空间。当然需要注意的是,代码段的内容 是经过编译器优化以及汇编之后的大小,你在代码里添加注释,或者一些无意义的代码是不会增大code段的大小的。
RO-data段:即read only – data,只读数据段。在代码中定义的 const 常量,printf 打印的固定字符等,这些均会被存放到此数据段内。
RW-data(读写数据存储区):存储已初始化的全局变量和静态变量。
ZI-data(零初始化数据区):存储未初始化的全局变量和静态变量,程序开始运行时初始化为0。
直接提供给大家以下公式:
Total RO Size = Code + RO Data
Total RW Size = RW Data + ZI Data
Total ROM Size = Code + RO Data + RW Data
RAM计算
引用如下:
单片机/MCU内存分配解读_单片机内存-CSDN博客
作者:weixin_41564872