1、esp-idf应用程序启动流程

esp-idf 应用程序启动流程

一、应用程序的内存布局

IRAM(指令 RAM)

ESP-IDF 将内部 SRAM0 区域的一部分分配为指令 RAM。

除了开始的 64kB 用作 PRO CPU 和 APP CPU 的高速缓存外,剩余内存区域(从 0x400800000x400A0000 )被用来存储应用程序中部分需要在RAM中运行的代码。

一些 ESP-IDF 的组件和 WiFi 协议栈的部分代码通过链接脚本文件被存放到了这块内存区域。

如果一些应用程序的代码需要放在 IRAM 中运行,可以使用 IRAM_ATTR 宏定义进行声明。

IROM(代码从 Flash 中运行)

如果一个函数没有被显式地声明放在 IRAM 或者 RTC 内存中,则将其置于 Flash 中。ESP-IDF 将从 Flash 中执行的代码放在 0x400D0000 — 0x40400000 区域的开始,在启动阶段,二级引导程序会初始化 Flash MMU,将代码在 Flash 中的位置映射到这个区域的开头。对这个区域的访问会被透明地缓存到 0x40070000 — 0x40080000 范围内的两个 32kB 的块中。

请注意,使用 Window ABI CALLx 指令可能无法访问 0x40000000 — 0x40400000 区域以外的代码,所以要特别留意应用程序是否使用了 0x40400000 — 0x40800000 或者 0x40800000 — 0x40C00000 区域,ESP-IDF 默认不会使用这两个区域。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!