1、esp-idf应用程序启动流程
esp-idf 应用程序启动流程
一、应用程序的内存布局
IRAM(指令 RAM)
ESP-IDF 将内部 SRAM0 区域的一部分分配为指令 RAM。
除了开始的 64kB 用作 PRO CPU 和 APP CPU 的高速缓存外,剩余内存区域(从 0x40080000
至 0x400A0000
)被用来存储应用程序中部分需要在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 协议 ,转载请注明出处!