ESP32 存储系统 (Flash RAM ROM)

ROM 与 flash 的区别

  1. 片内 ROM 一般用来初始化系统核心外设,包括时钟、串口、DRAM、Flash等,一般在芯片量产后就被固化。
  2. flash 分为 NOR flash 和 NAND flash,前者主要用于代码存储,可以直接读取代码并执行(XIP,eXecute In Place),无需装载到 RAM ,节约了 SRAM 容量和成本,后者主要用于大容量数据存储。

NOR flash 和 NAND flash 基本结构不同,NOR 代表或非,NAND代表与非, NOR flash 和 NAND flash具体区别可见:http://www.elecfans.com/bandaoti/cunchu/20120925290176.html
NOR Flash芯片内执行(XIP):https://blog.csdn.net/dongdong0071/article/details/85425383

SRAM 与 PSRAM 区别

  1. 片内ram一般用TCM(Tightly Coupled Memory)的方式集成在CPU芯片内部,有单独的数据通道,它的访问速度更快。
  2. 片外ram的访问要多一个环节,CPU发出需要访问的地址到 AHB 总线控制器,总线控制器判断对应的地址在片外RAM,将访问请求递给 RAM 控制器,再由 RAM 控制器访问 RAM 后将数据返回。
  3. 片内的访问速度是片外RAM的1.5~2倍,但成本较高。
  4. 如果片内 RAM 和片外 RAM 同时存在,那么片内 RAM 一般用来存放中断处理函数、RTOS调度器等使用频率最高的代码和中断堆栈这种读写频率极高的内存区,如果有多余的部分也可以放一些经常被引用到的全局变量。同时片外 RAM 可以用来存储全局变量,bss,以及我们常用到的malloc所分配的堆空间等

链接脚本

  1. RAM 和 ROM 的物理地址映射由硬件数字工程师确定
  2. 哪些数据存放在 RAM 区域 哪些存储在 ROM 区域由软件工程师确定
  3. 软件工程师可通过修改链接脚本,确定项目变量存放位置
  4. 把数据放在 RAM 中 并不是直接放在 RAM 中,由于芯片上电之后 RAM 中的数据是随机的,需要 CPU 从存储器中读取存放在 RAM 中的段,将其复制到 RAM 中

代码与数据存放位置

RAM:

  1. 存放程序经常读写的全局变量
  2. 存放经常访问的中断服务函数
  3. 访问频率比较高的其他数据

ROM/NOR Flash:

  1. 只读代码段
  2. const 数据
  3. 字符串

打印 elf 文件中的布局信息

打印指令:

readelf -a build/yourproject.elf > elfmessage.out

输出示例:

elf_message

输出示例解读:

C语言变量的存储布局:https://www.cnblogs.com/clover-toeic/p/3755066.html

猜你喜欢

转载自blog.csdn.net/qq_20515461/article/details/106021503