Я создаю почти пустой проект ESP-IDF C для ESP32-S3. Я добавил следующие компоненты:
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 не имеет выделенного «ОЗУ инструкций» (IRAM). При желании вся оперативная память может быть использована для инструкций/кода. Вот почему для S3 показанный «размер» «IRAM» — это просто объем ОЗУ, выделенный для всего кода «IRAM» в вашем приложении, и он всегда будет «полным» или «почти полным».
Из документов это было неясно. Благодарю за разъяснение!