Если вы занимаетесь программированием ESP32 в Arduino IDE, то могли столкнуться с проблемой нехватки памяти для скетча.
Если вы занимаетесь программированием ESP32 в Arduino IDE, то могли столкнуться с проблемой нехватки памяти для скетча.
У нас возникла подобная проблема, когда мы создали проект с широким функционалом и задействовали в нём беспроводные каналы связи Wi-Fi и Bluetooth.
У нас встал вопрос: почему из 4 МБ памяти нам доступно меньше половины? Разгадка заключается в разметке памяти ESP32.
Для того, чтобы изменить разметку по умолчанию, нужно найти на компьютере папку
<LOCATION_OF_ARDUINO_ESP32>/tools/partitions
и создать в ней новый файл, например с именем max.csv. Далее копируем туда следующее содержимое:
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x1E0000, app1, app, ota_1, 0x1F0000,0x1E0000, eeprom, data, 0x99, 0x3F0000,0x1000, spiffs, data, spiffs, 0x3F1000,0xF000,
Значение 0x1E0000 говорит компилятору, что в нашем распоряжении теперь 1966080 байт флеш-памяти для скетча. Далее нам необходимо найти файл
<LOCATION_OF_ARDUINO_ESP32>/boards.txt
и внести исправления в него. Сделайте копию описания платы, для которой вы хотите изменить размер памяти. В этом примере мы скопировали модуль ESP32 Dev и переименовали все вхождения «esp32» в «esp32max».
Было:
esp32.name=ESP32 Dev Module ... esp32.upload.maximum_size=1310720 ... esp32.build.partitions=default ...
Стало:
esp32max.name=ESP32 Dev Max ... esp32max.upload.maximum_size=1966080 ... esp32max.build.partitions=max ...
Далее нужно сохранить изменения, перезапустить среду разработки Arduino IDE и выбрать новую плату ESP32 Dev Module Max.
После компиляции кода мы увидим:
Archiving built core (caching) in: C:\Users\BeeGee\AppData\Local\Temp\arduino_cache_147130\core\core_espressif_esp32_esp32max_FlashMode_qio,FlashFreq_80,FlashSize_4M,UploadSpeed_921600,DebugLevel_none_af83d5f1a3fa262478237a470cbae092.a Sketch uses 1504054 bytes (79%) of program storage space. Maximum is 1966080 bytes. Global variables use 70308 bytes (23%) of dynamic memory, leaving 224604 bytes for local variables. Maximum is 294912 bytes.
Таким образом, проблема с памятью решена. Но это не предел! Есть возможность еще больше расширить память.
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x3С0000, eeprom, data, 0x99, 0x3F0000,0x1000, spiffs, data, spiffs, 0x3F1000,0xF000,
Это позволит получить для программы 3932160 байт памяти, но этот вариант мы еще не проверяли на практике.