Размер раздела ESP32 и максимальный размер программы #2
re. Размер раздела ESP32 и максимальный размер программы
В дополнение к вышеуказанному вопросу:
Вышеприведённая программа — это небольшая и удобная программа. Однако есть ли способ сослаться на «partition->size» «app0» или извлечь его для использования в выражении препроцессора «#if»?
В идеале я бы хотел использовать что-то вроде:
#if ((partition->size)<=1310720)
#error “you must select a larger Partition-Scheme”
#endif
Или альтернативно:
#if (PartitionScheme!=MinimalSpiffs)
#error “you must select the Minimal SPIFFS Partition-Scheme”
#endif
// см. esp32.menu.PartitionScheme.min_spiffs= Минимальный SPIFFS (1,9 МБ APP с OTA/190 КБ SPIFFS)
(Это потому, что у меня есть пара проектов, которые используют 99% пространства для хранения программ «4 МБ по умолчанию с SPIFFS» и успешно компилируются и загружаются на мои платы разработки ESP32, но приводят к тому, что ESP32 застревает в цикле аварийной загрузки — я предполагаю, что это вышеупомянутый цикл «запуск-перезагрузка-вечный». Поэтому для этих проектов я хотел бы добавить указанную выше проверку «#if», чтобы гарантировать, что я могу принудительно завершить компиляцию ошибкой/сбоем, если не выбрана правильная (большая) PartitionScheme.)
@Adriano & @6v6gt – большое спасибо за ваши комментарии ниже.
Нет, узнать размер раздела во время компиляции невозможно. Поскольку код не имеет к разделу никакого отношения.
Некоторая информация из выбранных параметров boards.txt доступна в Arduino для использования в операторах #if.
Например, можно использовать «#ifdef ARDUINO_ NodeMCU_32S» (взятый из параметра «nodemcu-32s.build.board=NodeMCU_32S» в файле boards.txt), чтобы проверить, выбран ли «NodeMCU_32S». Именно поэтому я надеялся, что выбранные «Схемы разделов» также могут быть доступны для использования в операторах #if!?
Вы можете проверить размер раздела после запуска кода
Именно это и было показано в примере кода в исходной статье Размер раздела ESP32 и максимальный размер программы. Однако в моей ситуации, описанной выше, код не запускается, поскольку я застреваю в бесконечном цикле «запуск-перезагрузка-вечно».
..Файл partitions.csv.. Arduino IDE 2.x …если вы используете пользовательскую схему разделов, IDE предполагает, что вы используете устройство с 16 МБ флэш-памяти…
Спасибо – это очень полезная информация!
Обновление: Интересно, что https://github.com/HamzaHajeir/ESP32-Arduino-Builds/blob/master/tools/platformio-build-esp32.py имеет, по-видимому, определенную переменную вида: «ARDUINO_PARTITION_%s», как показано ниже:
CPPDEFINES=[
"HAVE_CONFIG_H",
("MBEDTLS_CONFIG_FILE", '\\"mbedtls/esp_config.h\\"'),
"UNITY_INCLUDE_CONFIG_H",
"WITH_POSIX",
"_GNU_SOURCE",
("IDF_VER", '\\"v4.4.5\\"'),
"ESP_PLATFORM",
"_POSIX_READER_WRITER_LOCKS",
"ARDUINO_ARCH_ESP32",
"ESP32",
("F_CPU", "$BOARD_F_CPU"),
("ARDUINO", 10812),
("ARDUINO_VARIANT", '\\"%s\\"' % env.BoardConfig().get("build.variant").replace('"', "")),
("ARDUINO_BOARD", '\\"%s\\"' % env.BoardConfig().get("name").replace('"', "")),
"ARDUINO_PARTITION_%s" % basename(env.BoardConfig().get(
"build.partitions", "default.csv")).replace(".csv", "").replace("-", "_")
]
Но этот файл «platformio-build-esp32.py» кажется сильно отличается от версии по умолчанию https://github.com/espressif/arduino-esp32/blob/master/tools/platformio-build.py, и включить его выше моих возможностей
"ARDUINO_PARTITION_%s" % basename(env.BoardConfig().get(
"build.partitions", "default.csv")).replace(".csv", "").replace("-", "_")
строка в файл espressif по умолчанию!
@Rob, 👍0
3 ответа
Нет, узнать размер раздела во время компиляции невозможно, поскольку код не имеет к нему никакого отношения. Вы можете проверить размер раздела после запуска кода.
С ядром Arduino ESP32 3.x это относительно просто: нужно добавить файл пользовательского раздела (partitions.csv) в папку скетча. Конечно, вам (вероятно, всё ещё) придётся не забыть выбрать «Пользовательский раздел» в меню инструментов. Файл partitions.csv даже учитывается средой Arduino IDE 2.x для загрузки данных скетча, то есть в раздел littleFS. Однако в настоящее время при использовании пользовательской схемы разбиения IDE предполагает, что вы используете устройство с 16 МБ флеш-памяти для статистики использования, генерируемой в процессе компиляции.
Если кто-то хочет знать, как это сделать, вот пример (с использованием board="ESP32 Dev Module"):
// #if ARDUINO_PARTITION_default // from boards.txt: "esp32.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"
// #error "please change to a larger Partition Scheme"
#if ARDUINO_PARTITION_no_ota // from boards.txt: "esp32.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS)"
Serial.println("ARDUINO_PARTITION_no_ota being used");
#else
#error "wrong Partition Scheme has been selected"
#endif
- Размер раздела ESP32 и максимальный размер программы
- Установка значения float до двух знаков после запятой
- ESP32-CAM первый: 0x8 TG1WDT_SYS_RESET загрузочный цикл
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- esp32 Stack canary watchpoint срабатывает
- Проверка размера во флэш-памяти Esp32
- Программаторы для этой платы отсутствуют - Программирование ESP32 Cam с помощью Ardunio IDE
- Ошибка Cast from 'char*' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]