mcu的ram与rom存储分配

一图流:::
image

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

posted @ 2022-06-20 10:19  月的光景  阅读(1146)  评论(0编辑  收藏  举报