mcu的ram与rom存储分配
一图流:::
ram:随机存取存储器(Random Access Memory),因为其可以用来存储,并且读写速度很快,但掉电易失,常被用来做“运行内存”,存储的内容包括数据和程序:
如果设备存储使用的是nand flash,flash本身不支持片上执行程序,需要将程序拷贝到ram中执行,反之如果用nor flash则支持偏上执行,不需要拷贝。
rom:只读存储器(Read Only Memory),即flash。造价便宜且掉电不易失,但是读写速度相对来说慢一点,用来存储代码和一部分数据。
rom 一般从0开始,保存着:
- Ro-data段:宏,常量字符串等文字常量存放区域
- text(Code)段:程序代码块存放区域,根据flash类型选择是否需要拷贝程序到ram中
- const修饰的变量(哈佛结构中)
ram 一般从0x2000的开始,地址由高到低保存着:
- 栈stack:在启动文件里分配,作为局部变量自动申请和释放空间的变量(由mcu自己控制),地址从最高开始递减
- 堆heap:在启动文件里分配,作为用户主动申请时的空间(malloc),地址递增
- bss段(ZI-data):存放未初始化的全局变量和静态变量,地址递增,实际上这部分会被直接清0,全局静态不分配空间
- data段(Rw-data):存放初始化后的全局变量和静态变量和全局静态变量,地址递增,由于掉电易失,所以其实存在rom
rom size = Total RO Size (Code + RO Data) + TRw-Data
ram size = stack + heep + bss + data