esp32程序存储结构--自用笔记版
可能会有错误.....
一、前置知识:ROM、RAM、FLASH, EEPROM
https://blog.csdn.net/QL_SD/article/details/151609760?fromshare=blogdetail&sharetype=blogdetail&sharerId=151609760&sharerefer=PC&sharesource=QL_SD&sharefrom=from_link
https://blog.csdn.net/QL_SD/article/details/151609760?fromshare=blogdetail&sharetype=blogdetail&sharerId=151609760&sharerefer=PC&sharesource=QL_SD&sharefrom=from_link
二、ESP32内存机制
1.ESP32的存储架构比传统单片机复杂得多,因为它具有双核处理器、多种内存总线以及超低功耗协处理器。
2.ESP32的所有内存(内部RAM、外部Flash芯片上的内容)都被映射到CPU的一个统一的4GB地址空间中。CPU通过访问不同的地址范围,就访问到了不同类型的存储器。
3.这些存储器区域的划分,主要是为了在性能、功耗和功能之间取得最佳平衡。
三、具体说明
DRAM (数据 RAM)
功能:存储变量(全局变量、静态变量、堆栈等)。CPU 核心以最高速度在此进行数据读写。断电后数据丢失。保存非常量静态数据、初始化未0的数据
“noinit” DRAM
功能:DRAM 中的一段特殊区域。芯片重启(如看门狗复位、软件复位)时,其中的数据不会被编译器初始化为零,得以保留。用于记录重启原因等场景。存放未初始化的全局变量
IRAM (指令 RAM)
功能:存储需要高频访问或中断中执行的程序代码(函数)。CPU 可直接从 IRAM 高速取指执行,避免从较慢的 Flash 读取造成的延迟。ESP-IDF将内部SRAM(0、1、2)的部分区域SRAM(0、1)分配为指令RAM中断处理程序,一般放入指令RAM中、可以通过IRAM_ATTR宏在源码中指定放入IRAM的代码
IROM (指令 ROM)
功能:存储应用程序代码。实际位于外部 Flash 中,但被内存映射到 CPU 的地址空间。CPU 可从这里直接读取代码执行,但速度比 IRAM 慢。如果一个函数没有被显示的声明在IRAM和RYC存储器中,则会默认放在flash中
DROM (数据 ROM)
功能:存储常量数据(如字符串、查找表)。实际与 IROM 一样位于外部 Flash 中,作为数据访问的区域(通过内存映射)。用于存放只读数据
RTC_Slow_Memory
功能:深度睡眠模式下唯一保持供电的慢速内存。容量小、速度极慢,用于在深度睡眠期间存储少量需要保留的数据(如状态标志)。代码无法在此执行。
RTC慢速存储器,RTC_NOINIT_ATTR属性宏可以将数据放入RTC_Slow_Memory。放入此类存储器的值从深度睡眠模式醒来后会保持不变
RTC_Fast_Memory
功能:深度睡眠模式下保持供电的快速内存。除了存储数据,一小段代码(如深度睡眠唤醒程序)可加载到此内存中并由 ULP 协处理器执行,因为主 CPU 在睡眠时已断电。该区域既可以作为指令存储器也可以作为数据存储器进行访问。从深度睡眠模式唤醒后必须要运行的代码则要放在这里
