Размер кода в ESP32 и ESP8266

Добрый день, господа специалисты!
Прошу прощения за глупый вопрос, но, ответа на просторах интернета не нашел.
Программа на Arduino под контроллеры серии ESP. Код по ESP8266 компилируется и работает. При расширении функционала решил перейти на ESP32. Но, при компиляции одного и того же скетча получил бинарник более чем в два раза больше по размеру для ESP32, чем для ESP8266. Просто переключая плату в среде Arduino:

. Variables and constants in RAM (global, static), used 47488 / 80192 bytes (59%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ DATA     1592     initialized variables
╠══ RODATA   17240    constants       
╚══ BSS      28656    zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 62263 / 65536 bytes (95%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ ICACHE   32768    reserved space for flash instruction cache
╚══ IRAM     29495    code in IRAM    
. Code in flash (default, ICACHE_FLASH_ATTR), used 544516 / 1048576 bytes (51%)
║   SEGMENT  BYTES    DESCRIPTION
╚══ IROM     544516   code in flash   

А в ESP32 этот же код уже не лезет:

Sketch uses 1337920 bytes (102%) of program storage space. Maximum is 1310720 bytes.
Global variables use 54084 bytes (16%) of dynamic memory, leaving 273596 bytes for local variables. Maximum is 327680 bytes.
Sketch too big; see https://support.arduino.cc/hc/en-us/articles/360013825179 for tips on reducing it.
text section exceeds available space in board

Compilation error: text section exceeds available space in board

То есть, для ESP8266 скомпилированный скетч занимает 544516 байт, а для ESP32 - 1337920 байт. В чем прикол? Корявые библиотеки? Или я что-то не так делаю?
В коде есть переключатели для смены специфических библиотек для разных процессоров и некоторые входы в функции

#ifdef ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <WebServer.h>
#include <ESP32_NOW.h >
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPClient.h>
#include <espnow.h>
#endif

#ifdef ESP32
const int ROOM_TEMP_SENSOR_PIN = 12;  // Датчик температуры внутри помещения
const int OTC_TEMP_SENSOR_PIN = 13;   // Датчик температуры на улице
#elif defined(ESP8266)
const int ROOM_TEMP_SENSOR_PIN = D0;  // Датчик температуры внутри помещения
#endif

В общем, прошу помощи и советов от старших товарищей.

Забейте, особенность платформы

Arduino или ESP?
Просто теперь скетч не лезет в контроллер, стандартные размеры разметки разделов памяти меня не устраивают, приходится теперь извращаться с разметками… Либо брать чип с бОльшей памятью на борту.

ESP32. Там неявно используется FreeRTOS

1 лайк

Либо заняться оптимизацией кода

2 лайка

Да, тогда лучше оптимизировать. Легче работать будет и контроллеру, и программисту в будущем :slight_smile:
Спасибо!

У вас написано, что максимальный размер - 1 мегабайт.

Это очень подозрительно (обычно все борды идут минимум с четырьмя мегабайтами).

Зайдите в Arduino IDE->Tools и установите размер флешки побольше.

Ну, можно objdump натравить на .elf файл с твоей прошивкой и увидеть , в чем там прикол.

В ESP32 программа исполняется прямо с флешки (ну, через процессорный кэш, но все же). Размеры фдешек у ESP32 от 4 мегабайт.

Не обращай внимания на размер бинарника.

ESP32 работающие в экстрим условиях частенько выходят из строя (броски напруги), при этом накоротко по питанию. Так вот флешка остаётся целой. У меня скопилось горка таких контроллеров на 16 Мб. Решил для ремонта приобрести более дешевые контроллеры с 4 Мб флеши на борту. Вообщем теперь просто перекидываю 16 Мб флешку из сгоревших, и получаю контроллер, который даже не надо снова прошивать. Модуль начинает сразу работать с нужной конфигурацией.

1 лайк

По умолчанию там флеш делится на три части - APP, OTA и FS

Это не у меня написано, а у Arduino.

Так сделайте (выбирайте Huge App):

Второй раз пишу в этот форум и второй раз получаю флуд вместо ответов!
Что выбрать я и так знаю. Я спросил в самом первом посте “какого хрена!” размер одного и того же скетча в скомпилированном виде занимает больше места.
@v258 ответил, что это особенности различия ПО.

зато бесплатно

Адресуйте свой вопрос разработчикам ESP. Никто иной не ответит на него и выскажет исключительно свои догадки.

Возмущение - неоправданная реакция. В том, что вы ошиблись окошечком, вина только ваша. Можно было головой для начала подумать.

Задайте себе обратный вопрос - а какого хрена размер должен быть одинаковым, если камни разные и архитектура разная?