Добрый день, господа специалисты!
Прошу прощения за глупый вопрос, но, ответа на просторах интернета не нашел.
Программа на 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 работающие в экстрим условиях частенько выходят из строя (броски напруги), при этом накоротко по питанию. Так вот флешка остаётся целой. У меня скопилось горка таких контроллеров на 16 Мб. Решил для ремонта приобрести более дешевые контроллеры с 4 Мб флеши на борту. Вообщем теперь просто перекидываю 16 Мб флешку из сгоревших, и получаю контроллер, который даже не надо снова прошивать. Модуль начинает сразу работать с нужной конфигурацией.
Второй раз пишу в этот форум и второй раз получаю флуд вместо ответов!
Что выбрать я и так знаю. Я спросил в самом первом посте “какого хрена!” размер одного и того же скетча в скомпилированном виде занимает больше места. @v258 ответил, что это особенности различия ПО.