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

ESP32中的内存架构

组成

分为 SRAM0、SRAM1、SRAM2、RTC快速存储器、RTC慢速存储器,一共5个部分。在这里插入图片描述

默认内存布局

在这里插入图片描述

SRAM 以两种方式使用:

  • IRAM(Instruction Random Access Memory),指令存储,用作代码.text 段。
  • DRAM(Data Random Access Memory),数据存储,用作.BSS 段、.Data 段和堆。

通常代码是在Flash也就是ROM中的,这里IRAM存放代码是因为RAM通常具有更高的访问速度,适合需要快速响应的代码(如中断处理程序、实时任务等)。
如何设置代码存放在IRAM中?使用关键字IRAM_ATTR.

SRAM0 和 SRAM1 可以用作连续的 IRAM,而 SRAM1 和 SRAM2 可以用作连续的 DRAM 地址空间。但是默认情况下,ESP-IDF 会使用 SRAM1 作为 DRAM ,这是因为通常在应用程序中数据空间会比较紧缺。

注意:IRAM 和 DRAM 地址空间,地址生长的方向是相反的,仔细看上图的箭头所示。

IRAM 组织架构

典型IRAM组织架构

在这里插入图片描述

  • Cache:32KB用作 CPU0 的高速缓存,32KB用作 CPU1 高速缓存
  • Interrupt Vectors:中断向量
  • text:程序中所有标记为放置在 IRAM 中的代码段
  • Free IRAM:text 段之后的 IRAM 保持未使用状态,并添加到堆中

DRAM 组织架构

典型DRAM组织架构

在这里插入图片描述
DRAM空间的分配从 SRAM2 的末尾开始。

  • Used by ROM:8KB(0x3FFA_E000–0x3FFA_FFFF),用作某些 ROM 内置函数的数据空间;
  • data段:已初始化的数据段;
  • bss段:未初始化的 BSS 段;
  • Heap:剩余内存被配置为堆,典型的动态内存分配一般分配至该位置。

注意:堆中有两个区域(0x3FFE_0000–0x3FFE_0440 - 共 1088 字节)和(0x3FFE_3F20–0x3FFE_4350 - 共 1072 字节)供 ROM 代码存放数据。这些区域被标记为保留,并且堆分配器不会从这些区域分配内存。

启用蓝牙功能之后的 DRAM 组织结构

在这里插入图片描述
启用蓝牙(BT)功能后,蓝牙控制器(软件和硬件)需要使用专用的数据空间,即0x3FFB_0000–0x3FFB_DB5C 之间的 54KB。

当应用程序仅使用低功耗蓝牙(BLE)功能时,可以将 BT 控制器内存的一部分交还给堆。释放并添加到堆中的内存大小约为 19KB。

启用跟踪调试空间之后 DRAM 组织结构

在这里插入图片描述
应用程序级的跟踪调试(Trace)启用以后,它将在 DRAM 的末尾保留一个固定为 32KB 的内存空间。


http://www.kler.cn/a/590752.html

相关文章:

  • 【TVM教程】使用自定义调度规则(Sketch Rule)在 CPU 上自动调度稀疏矩阵乘法
  • 基于gitea的本地仓库创建
  • 总结 kotlin中的关键字和常用方法
  • 计算机操作系统(6) (经典进程同步问题)
  • 工厂能耗系统完整解决方案 ——安科瑞企业能源管控平台
  • 穆迪暖色调人像静物摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • PSI5接口
  • Web3游戏行业报告
  • 手写发布订阅模式
  • 大数据分析方法(65页PPT)
  • mac npm run dev报错 error:0308010C:digital envelope routines::unsupported
  • Java 多线程编程简介
  • 05 MP4解码AAC + 格式知识
  • python基础8 单元测试
  • 蓝桥杯备赛-贪心-管道
  • MySQL 进阶学习笔记(包括MySQL的存储引擎、索引、SQL优化、视图、存储过程、触发器、锁InnoDB引擎和MySQL管理)的相关内容详细版
  • 使用vue3+el-form实现动态新增名称,值,并对名称进行必填校验
  • npm 报错 unable to resolve dependency tree
  • 企业级 GitLab 开发流程全解
  • 功能强大的电脑硬件检测及驱动安装工具