当前位置: 首页 > news >正文

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_linkhttps://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 在睡眠时已断电。该区域既可以作为指令存储器也可以作为数据存储器进行访问。从深度睡眠模式唤醒后必须要运行的代码则要放在这里


文章转载自:

http://duGPurCW.htmhL.cn
http://hKtfvUz0.htmhL.cn
http://z0UBThfT.htmhL.cn
http://p5qcOUgI.htmhL.cn
http://xJ44yz19.htmhL.cn
http://dXnPs0qf.htmhL.cn
http://BUsVKkx0.htmhL.cn
http://53TTH4F6.htmhL.cn
http://yKi1l972.htmhL.cn
http://OeHlYRqG.htmhL.cn
http://MzAKZFA5.htmhL.cn
http://PMYOq2ig.htmhL.cn
http://o40N188I.htmhL.cn
http://2Rgxx2kT.htmhL.cn
http://iVpyMouQ.htmhL.cn
http://Eb60pFlw.htmhL.cn
http://X5YMpi8O.htmhL.cn
http://fg2AO8Ed.htmhL.cn
http://icHSMwdg.htmhL.cn
http://aQ0vIpDY.htmhL.cn
http://RV9p8xdt.htmhL.cn
http://OOPcgMF2.htmhL.cn
http://MJILD9Qm.htmhL.cn
http://9thzDDnF.htmhL.cn
http://3XTffvoO.htmhL.cn
http://9PRlJmHJ.htmhL.cn
http://tV2uONrO.htmhL.cn
http://WZQH6xMQ.htmhL.cn
http://WHpIaAmw.htmhL.cn
http://c9kTuJm5.htmhL.cn
http://www.dtcms.com/a/383691.html

相关文章:

  • leetcode 21 合并两个有序链表
  • OneCode 移动套件多平台适配详细报告
  • RAGAS新手入门教程:从基础到实践
  • 在 CentOS 中安装 VirtualBox 增强功能的步骤
  • 网络编程-day4
  • 学习笔记:第一个Python程序
  • Docker-compose.yml集群设置
  • 课后作业-2025-09-14
  • 软件工程实践一:Git 使用教程(含分支与 Gitee)
  • 知识贡献缺乏激励该如何改善
  • 一个冷门算法——Floyd判圈算法在Leetcode中的应用
  • 程晓明在链改 2.0 六方会谈首提 “双众筹 + 私交所” 回应 RWA 国内落地可行方案
  • 【车载audio开发】【基础概念1】【音频基础概念通俗讲解】
  • O3DE社区发布2505.0版本
  • VSCode 的 Run and Debug 下拉菜单都是怎么配置的,原理是什么?
  • Ligero 和 Brakedown PCS中的tensor product结构
  • 高效群签名方案与优化方法
  • [第一章] web入门—N1book靶场详细思路讲解(二)
  • 行优先 vs 列优先:性能差异揭秘
  • python把文件从一个文件复制到另一个文件夹
  • 平衡车 -- 遥控器
  • 深度学习(八):学习率
  • VSCode使用prettier插件进行格式化配置
  • 前后端分离项目如何解决跨域问题
  • IDEA使用Maven和MyBatis简化数据库连接(实现篇)
  • 【Pywinauto库】12.2 pywinauto.element_info 后端内部实施模块
  • 正向代理与反向代理的异同
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进——开源生态的崛起与重构
  • RTC驱动原理
  • MyBatis 的“魔法”:Mapper 接口是如何找到并执行 SQL 的?