Размер раздела ESP32 и максимальный размер программы #2

arduino-ide esp32 partition

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 по умолчанию!

, 👍0


3 ответа


0

Нет, узнать размер раздела во время компиляции невозможно, поскольку код не имеет к нему никакого отношения. Вы можете проверить размер раздела после запуска кода.

,

0

С ядром Arduino ESP32 3.x это относительно просто: нужно добавить файл пользовательского раздела (partitions.csv) в папку скетча. Конечно, вам (вероятно, всё ещё) придётся не забыть выбрать «Пользовательский раздел» в меню инструментов. Файл partitions.csv даже учитывается средой Arduino IDE 2.x для загрузки данных скетча, то есть в раздел littleFS. Однако в настоящее время при использовании пользовательской схемы разбиения IDE предполагает, что вы используете устройство с 16 МБ флеш-памяти для статистики использования, генерируемой в процессе компиляции.

,

1

Если кто-то хочет знать, как это сделать, вот пример (с использованием 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

,