我为 ESP32-S3 创建了一个几乎空的 ESP-IDF C 项目。 我添加了以下组件:
idf_component_register(SRCS ${SOURCES}
INCLUDE_DIRS .
REQUIRES
esp_driver_gpio
esp_driver_uart
esp_timer
esp_event
esp_wifi
nvs_flash
driver
fatfs
FT800-FT813-5.x)
我只写了几行代码。 编译后我看到IRAM内存已经满了:
Memory Type Usage Summary
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Memory Type/Section ┃ Used [bytes] ┃ Used [%] ┃ Remain [bytes] ┃ Total [bytes] ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ Flash Code │ 149695 │ 1.78 │ 8238881 │ 8388576 │
│ .text │ 149695 │ 1.78 │ │ │
│ DIRAM │ 74112 │ 21.43 │ 271744 │ 345856 │
│ .text │ 55651 │ 16.09 │ │ │
│ .data │ 11296 │ 3.27 │ │ │
│ .bss │ 7008 │ 2.03 │ │ │
│ Flash Data │ 67180 │ 0.2 │ 33487220 │ 33554400 │
│ .rodata │ 66924 │ 0.2 │ │ │
│ .appdesc │ 256 │ 0.0 │ │ │
│ IRAM │ 16383 │ 99.99 │ 1 │ 16384 │
│ .text │ 15356 │ 93.73 │ │ │
│ .vectors │ 1027 │ 6.27 │ │ │
│ RTC FAST │ 40 │ 0.49 │ 8152 │ 8192 │
│ .rtc_reserved │ 24 │ 0.29 │ │ │
└─────────────────────┴──────────────┴──────────┴────────────────┴───────────────┘
Total image size: 300205 bytes (.bin may be padded larger)
我正在阅读这里什么是 IRAM 以及这里如何最大限度地减少其使用。 从项目配置中,我删除了所有 IRAM 选项(我仅启用了主 SPI)。
据我所知,ESP32 有
CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM
参数可以更改 IRAM 大小,但 ESP32-S3 没有。
IRAM 已满而几乎没有编写代码会产生什么后果?还有其他方法可以减少其使用量(或增加其大小)吗?
与 ESP32 不同,ESP32-S3 没有专用的“指令 RAM”(IRAM)。如果需要,所有 RAM 均可用于指令/代码。这就是为什么对于 S3,显示的“IRAM”的“大小”只是应用程序中所有“IRAM”代码分配的 RAM 量,并且这将始终是“已满”/“几乎已满”。