ESP32系列--存储器类型和XIP特性

article/2025/10/14 1:10:25

一、目的

        当我们通过ESP-IDF开发ESP32时,可能会遇到类似这样的场景需要对某个函数的执行速度进行优化例如中断执行函数需要快入快出,那么应该怎么做呢,ESP-IDF里面有没有提供这样的方法或者机制呢?

        按照常识我们总认为内部SRAM的读写速度一般是最快的(有些芯片内部还有TCM--紧凑内存,可以认为是和CPU同频的内存),那么我们将代码放置到内部SRAM中就可以加快函数的执行。

       鉴于此我们需要对ESP32的存储器类型做个全面介绍,。以帮助大家对代码段、数据段、BSS的地址分配有个系统了解。

二、介绍

        参考资料

Memory Types - ESP32-S3 - — ESP-IDF Programming Guide latest documentationhttps://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/memory-types.html

        在讲解内部映射之前,我们需要知道下面几个基本概念:

  • code 代码段
  • rw data 读写段
  • ro data  只读数据段
  • bss 未初始化的或者数值为0的全局变量                

        在我们最终的image中,占用的Flash大小为code + rw data,占用的ram大小为rw data + bss段。

        下面我们介绍一些ESP-IDF中的内存映射以及各个段的特征  

        IRAM

        可以用于执行代码的RAM区域,ESP-IDF编译链接时默认代码的存放和执行都是在IROM(即Flash);通过MMU和指令Cache进行映射和执行加速。

        因为Flash的读取相比IRAM的读写较慢,当需要优化代码执行速度时,可以考虑将代码放置到IRAM中;在ESP-IDF的驱动代码中,如果指定中断Flags设置为ESP_INTR_FLAG_IRAM时,中断函数就必须放置到IRAM中。

        通过IRAM_ATTR宏定义来指定代码段的位置

#include "esp_attr.h"void IRAM_ATTR gpio_isr_handler(void* arg)
{// ...
}

        IROM

        用于存放代码或者执行代码的区域,即Flash地址空间;一般情况下代码和只读数据都是存放在Flash中,程序运行时XIP;由于SRAM有限,大部分情况下我们自己的代码尽量都放置在此区域


        DROM

        用于存放只读数据(即只读数据也放置在Flash中)


        DRAM

        用于存放初始化的全局变量(RW段)和未初始化的全局变量(BSS段);链接器会将此区域定向到芯片内部的SRAM,其剩余空间用于Heap分配;

        RW、BSS段一般都是存放在内部SRAM,但是BSS也可以放置在外部SRAM中。

        这边有个概念RW段执行的时候在SRAM,但是RW的数据是要先保存在Flash中(加载视图与执行视图的区别)

        通过EXT_RAM_BSS_ATTR宏定义可以将BSS段放置在外置在外部SRAM,需要在menuconfig中配置如下选项(高亮处)

        

         注意此选项也会将一些组件的bss段放置在外部SRAM中

        DRAM的空间大小受限于IRAM的使用,IRAM使用越多,DRAM就越少,Heap的大小也就更少。

        只读数据也通过DRAM_ATTR宏将数据放置到DRAM中(不建议,但是有些场景必须要这样做)

        指令Memory是可以执行的,且只能4字节对齐读写;数据Memory不可执行,可以单字节读写


        低功耗模式下使用的代码段和数据段

        Fast RTC

        用于低功耗代码的执行

        Slow RTC RAM

        放置在此区域的全局变量和静态变量可以被Fast RTC中的代码访问,通过RTC_NOINIT_ATTR宏定义来实现。

        DMA

        必须放置在内部SRAM中

void app_main()
{uint8_t stuff;WORD_ALIGNED_ATTR uint8_t buffer[] = "I want to send something";   //or the buffer will be placed right after stuff.// initialization code...spi_transaction_t temp = {.tx_buffer = buffer,.length = 8 * sizeof(buffer),};spi_device_transmit(spi, &temp);// other stuff
}


http://chatgpt.dhexx.cn/article/QBWClpQO.shtml

相关文章

Raspberry Pi Pico SDK开发-Flash-XIP

Flash-XIP RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 本实例将演示如何使用Flash。 1、Flash-XIP介绍 RP2040使用就地执行 (execute-in-…

Nor Flash芯片内执行(XIP)

前言:这个所谓的芯片内执行(XIP)对于我这种一根筋的人是很难理解的,一直总觉得CPU是只能在RAM中运行程序,为毛能够在Nor Flash中执行程序呢,这里面就有个概念容易混淆,也可能是翻译理解的问题。…

芯片的XIP与BootRom启动方式

XIP:execute in place,就地执行,即芯片内执行,指应用程序可以直接在flash闪存中取指然后译码、执行,不必再把代码读到系统RAM中,flash内执行时指Nor flash不需要初始化,可以直接在flash内执行代…

STM32CubeIDE XiP 和 BootROM介绍, XiP外部内存QSPI FLASH执行用户代码

随言: 目前的电子产品功能越来越多,随之而来的就是代码越来越庞大,代码所需要的存放空间也越来越大。 比如:用ST做GUI界面,面临最大的问题就是芯片内部flash最大才2M。在现在这个时代,2M其实也放不了几张…

mac实用小技巧之解压.xip文件

Mac下解压(.xip)文件 在安装Xcode的时候,我从官网下载了一个Xcode的安装文件,但是这个文件是(.xip)压缩文件,我使用了很多解压软件,都没有解压成功,最后上网查看,大家推荐了一种方法 “通用”里有时没有“…

XIP技术介绍

转载:https://blog.csdn.net/wk_kuan/article/details/39692371 1:简介 XIP,executed in place,本地执行。操作系统采用这种系统,可以不用将内核或执行代码拷贝到内存,而直接在代码的存储空间直接运行。采…

XIP技术

转自https://blog.csdn.net/amberman/article/details/8122300 侵删 首先认识下nandflash和norflash: NOR Flash 和 NAND Flash 是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Electrically Pr…

XIP技术总结

1.XIP eXecute In Place XIP即芯片内执行,指应用程序可以在flash闪存内运行,不必再把代码读到系统RAM中。需要注意的是,片内执行不是说程序直接在flash内执行,CPU的基本功能就是取指、译码和执行。norflash能在芯片内执行&#x…

XIP简介

1、XIP是什么? XIP(executed in place)本地执行。操作系统采用这种系统,可以不用将内核或执行代码拷贝到内存,而直接在代码的存储空间直接运行。 XIP是一种能够直接在闪速存储器中执行代码而无须装载到RAM中执行的机…

XIP(eXecute In Place)

XIP(eXecute In Place) 1.什么是XIP ​ eXecute In Place,即芯片内执行、就地执行,是指CPU直接从存储器中读取程序代码执行,而不用再读到内存中。应用程序可以直接在flash闪存内运行,不必再把代码读到系统…

网页游戏设计(HTML5入门)--- 基础知识篇

01 1、网络游戏(Online Game) 指用户通过计算机互联网进行交互娱乐的电子游戏,通常以互联网为传输媒介,以游戏运营商和用户计算机作为处理终端,以专门的游戏客户端软件或浏览器为信息交互窗口。 2、客户端形式 这一…

计算机基础知识教程

计算机硬件Hardware系统 起源:十九世纪英国; 诞生:1946.2.15,美国宾州大学; 发展:电子管-》晶体管-》集成电路-》大规模集成电路-》超大规模集成电路; 目前:PC系列微型计算机&#x…

HTML5基础网页设计(加代码CSS)

简单网页的模板&#xff0c;多多支持&#xff0c;感谢。知识整理 目录 一、HTML5 简单网页设计&#xff1a; CSS修饰 一、HTML5 简单网页设计&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>简单网页测试…

vue基础知识汇总

一、简介 1.vue是一套用于构建用户界面的渐进式JavaScript框架 2.特点&#xff1a; 采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护声明式编码&#xff0c;让编码人员无需直接操作DOM&#xff0c;提高开发效率使用虚拟DOM优秀的Diff算法&#xff0c;尽量复用DO…

计算机基础知识点总结

系列文章目录 文章目录 系列文章目录一、计算机系统知识计算机组成进制转换数据编码校验码Flynn分类CISC与RISC流水线cache输入输出技术总线结构内存信息安全计算机性能局部性原理 编译原理文法 操作系统基础知识 软件工程软件生存周期系统分析基础&#xff1a;软件测试 计算机…

【WEB前端开发】基础知识大总结(HTML5+CSS3)

本文共一万七千字&#xff0c;十六个内容点&#xff0c;七十个知识点 目录 一、转义字符二、表单标签1、form标签2、input元素3、label 标签4、select 标签5、button 元素 三、语义化标签四、Head标签1、title 标签2、link标签3、style标签4、script 标签5、mate 标签6、base 标…

web开发基础知识

web开发基础知识学习 一、网页开发三剑客 ​ 我们看到的网页通过代码来实现的 &#xff0c;这些代码由浏览器解释并渲染成你看到的丰富多彩的页面效果。 这个浏览器就相当于Python的解释器&#xff0c;专门负责解释和执行(渲染&#xff09;网页代码。写网页的代码是专门的语言…

HTML基础知识总结

原文 经过这段时间的学习&#xff0c;对于html的一些基础知识有了一定的了解。所谓好记性不如烂笔头&#xff0c;唯有一点点累积&#xff0c;才能汇聚成知识的海洋。现在&#xff0c;我对这段时间的学习做一个总结。 一、HTML的定义 HTML&#xff0c;超文本标记语言&#xf…

前端-HTML基础知识详解

每日分享&#xff1a; 不贪婪 凡事皆有度&#xff0c;把握好分寸&#xff0c;学会知足常乐。 目录&#xff1a; 初始常用的HTML标签资源路径列表标签表格标签表单标签表单提交 一、初始常用的HTML标签 小结 学习html语言就是学习标签的用法编写html标签一般用小写html标签…

html5基础知识第四章其他标签

以下内容是学习期间整理&#xff0c;有些语句是便于理解&#xff0c;便于快速入门写的。并不权威。 表格&#xff1a; <table><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tb…