Compiling Size compared to Arduino

Community, I need help for an issue you encountered while compiling on PlatformIO: the size of the final compiled file is beyond the FLASH memory size limit.

PlatformIO vs Arduino IDE output comparison
For an empty project:
PlatformIO:
RAM: [] 4.5% (used 14700 bytes from 327680 bytes)
Flash: [==] 16.0% (used 209799 bytes from 1310720 bytes)

Arduino IDE:
Sketch uses 205144 bytes (15%) of program storage space. Maximum is 1310720 bytes.
Global variables use 14492 bytes (4%) of dynamic memory, leaving 313188 bytes for local variables. Maximum is 327680 bytes.

For the same source code:
PlatformIO:
RAM: [==] 15.4% (used 50336 bytes from 327680 bytes)
*** [checkprogsize] Explicit exit, status 1
Flash: [==========] 101.5% (used 1330601 bytes from 1310720 bytes)

Arduino IDE:
Sketch uses 1125082 bytes (85%) of program storage space. Maximum is 1310720 bytes.
Global variables use 45108 bytes (13%) of dynamic memory, leaving 282572 bytes for local variables. Maximum is 327680 bytes.

After updating to latest AtmelAVR updates, my program has increased over 100%. Now I cannot upload the code to my ESP32 DEV MODULE. Someone please help! I have read several forums but all without solution to the problem.

The problem could lie in multiple things.

  • using a different Arduino core version than in the Arduino IDE
  • using different external library versions
  • using a different compiler version
  • wrong platformio / framework configuration which doesn’t match Arduino IDE

In order for us to help you we would need the following information:

  • ESP32 board platform version inside Arduino IDE
  • list of external libraries used in the Arduino IDE and their versions (library manager)
  • platformio.ini and code for reproduction
1 Like

Here I send the configuration of my Arduino IDE, and my platform.ini. I use no external library, I only include the header
#include <WiFi.h> and call the WiFi.begin () function and the percentage of memory consumption increases by 40%.

PlatformIO output:

Processing esp32dev (platform: espressif32; board: esp32dev; framework: arduino)
------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 1.12.3 > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, 
olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 3.10004.200129 (1.0.4)
 - tool-esptoolpy 1.20600.0 (2.6.0) 
 - toolchain-xtensa32 2.50200.80 (5.2.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 39 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <WiFi> 1.0
Building in release mode
Compiling .pio\build\esp32dev\src\main.cpp.o
Compiling .pio\build\esp32dev\lib8d1\WiFi\WiFiScan.cpp.o
Compiling .pio\build\esp32dev\lib8d1\WiFi\WiFiServer.cpp.o
Compiling .pio\build\esp32dev\lib8d1\WiFi\WiFiUdp.cpp.o
Archiving .pio\build\esp32dev\lib8d1\libWiFi.a
Linking .pio\build\esp32dev\firmware.elf
Building .pio\build\esp32dev\firmware.bin
Retrieving maximum program size .pio\build\esp32dev\firmware.elf
Checking size .pio\build\esp32dev\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]  11.6% (used 37960 bytes from 327680 bytes)
Flash: [=====     ]  47.1% (used 617138 bytes from 1310720 bytes)
esptool.py v2.6
========================================================= [SUCCESS] Took 9.46 seconds =========================================================

Arduino IDE output:

Sketch uses 613514 bytes (46%) of program storage space. Maximum is 1310720 bytes.
Global variables use 37908 bytes (11%) of dynamic memory, leaving 289772 bytes for local variables. Maximum is 327680 bytes.

platform.ini

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino

Did you ever get this resolved? I’m running into an issue where a relatively simple setup has overflowed the flash of an esp32 device, and I’d love to get some suggestions of where to look.

The arduino IDE isn’t really an option for me (because reasons), but I’m virtually certain this simple BLE server wouldn’t overflow there…

Arduino IDE gives an option to add APP memory, change your Partition Scheme. Currently on your picture it is 1.2MB APP/1.5MB SPIFFS, but APP can be up to 3MB at least in my case.

I’m having the same problem, on Platform io my code is 1329734 bytes, on Arduino it is 952962 bytes. It ends up being work having to develop on the io platform and send the code on the Arduino ide. Has anyone managed to resolve this?

Still the same problem!

Any new idea?

Thanks in advance

Joaquim

Same problem, empty source (main.cpp & tino.ino), compiler, packages (Arduino-Esp32 v2.0.6 & IDF v4.4.0)

I think the problem is in the compile flags, but i can’t locate them

Source code
#include <Arduino.h>
void setup() {};
void loop() {};

PLATFORMIO - ESP32 v2.0.6 & IDF v4.4.3
RAM: [= ] 6.7% (used 21860 bytes from 327680 bytes)
Flash: [= ] 11.7% (used 229273 bytes from 1966080 bytes)

ARDUINO IDE - ESP32 v2.0.6 & IDF v4.4.3
Sketch uses 227065 bytes (11%) of program storage space. Maximum is 1966080 bytes.
Global variables use 21760 bytes (6%) of dynamic memory, leaving 305920 bytes for local variables. Maximum is 327680 bytes.

PLATFORMIO COMPILER OUTPUT EXTRACT FOR MAIN.CPP COMPILE
Processing esp32dev (platform: espressif32; board: esp32dev; framework: arduino)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: Redirecting...
PLATFORM: Espressif 32 (5.3.0) > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:

  • framework-arduinoespressif32 @ 3.20006.221224 (2.0.6)
  • tool-esptoolpy @ 1.40400.0 (4.4.0)
  • toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
    LDF: Library Dependency Finder → Library Dependency Finder (LDF) — PlatformIO latest documentation
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 33 compatible libraries
    Scanning dependencies…
    *********** log for main.cpp file compile ***********
    d:/users/nicola/.platformio/packages/toolchain-xtensa-esp32/bin/…/libexec/gcc/xtensa-esp32-elf/8.4.0/cc1plus.exe
    -quiet
    -v
    -I D:/Users/nicola/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include
    … other -I files
    -I D:/Users/nicola/.platformio/packages/framework-arduinoespressif32/variants/esp32
    -imultilib no-rtti
    -iprefix d:\users\nicola.platformio\packages\toolchain-xtensa-esp32\bin../lib/gcc/xtensa-esp32-elf/8.4.0/
    -MMD .pio/build/esp32dev/FrameworkArduino/main.cpp.d
    -MQ .pio/build/esp32dev/FrameworkArduino/main.cpp.o
    -D PLATFORMIO=60105
    -D ARDUINO_ESP32_DEV
    -D HAVE_CONFIG_H
    -D MBEDTLS_CONFIG_FILE=“mbedtls/esp_config.h”
    -D UNITY_INCLUDE_CONFIG_H
    -D WITH_POSIX
    -D _GNU_SOURCE
    -D IDF_VER=“v4.4.3”
    -D ESP_PLATFORM
    -D _POSIX_READER_WRITER_LOCKS
    -D ARDUINO_ARCH_ESP32
    -D ESP32
    -D F_CPU=240000000L
    -D ARDUINO=10812
    -D ARDUINO_VARIANT=“esp32”
    -D ARDUINO_BOARD=“Espressif ESP32 Dev Module”
    -D ARDUINO_PARTITION_OTA_1.9MB_APP_190KB_SPIF
    D:/Users/nicola/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp
    -quiet
    -dumpbase main.cpp
    -mlongcalls
    -auxbase-strip .pio/build/esp32dev/FrameworkArduino/main.cpp.o
    -ggdb -Os
    -Wno-frame-address
    -Wno-error=unused-function
    -Wno-error=unused-variable
    -Wno-error=deprecated-declarations
    -Wno-unused-parameter
    -Wno-sign-compare
    -Wwrite-strings
    -Wno-error=unused-but-set-variable
    -std=gnu++11 -version -fexceptions -fno-rtti -ffunction-sections -fdata-sections -freorder-blocks
    -fstack-protector -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion
    -o H:\Temp\ccAoH17X.s

ARDUINO COMPILER OUTPUT EXTRACT FOR TINO.INO COMPILE
Using board ‘esp32’ from platform in folder: C:\arduino-1.8.19_ESP32\portable\packages\esp32\hardware\esp32\2.0.6
Using core ‘esp32’ from platform in folder: C:\arduino-1.8.19_ESP32\portable\packages\esp32\hardware\esp32\2.0.6
esptool.py v4.2.1
*********** log for tino.ino file compiling ***********
Compiling sketch…
“C:\arduino-1.8.19_ESP32\portable\packages\esp32\tools\xtensa-esp32-elf-gcc\gcc8_4_0-esp-2021r2-patch5/bin/xtensa-esp32-elf-g++”
-DHAVE_CONFIG_H
“-DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h"”
-DUNITY_INCLUDE_CONFIG_H
-DWITH_POSIX
-D_GNU_SOURCE
“-DIDF_VER="v4.4.3"”
-DESP_PLATFORM
-D_POSIX_READER_WRITER_LOCKS
“-IC:\arduino-1.8.19_ESP32\portable\packages\esp32\hardware\esp32\2.0.6/tools/sdk/esp32/include/newlib/platform_include”
… other -IC files
“-IC:\arduino-1.8.19_ESP32\portable\packages\esp32\hardware\esp32\2.0.6/tools/sdk/esp32/qio_qspi/include”
-mlongcalls
-Wno-frame-address
-ffunction-sections
-fdata-sections
-Wno-error=unused-function
-Wno-error=unused-variable
-Wno-error=deprecated-declarations
-Wno-unused-parameter
-Wno-sign-compare
-ggdb
-freorder-blocks
-Wwrite-strings
-fstack-protector
-fstrict-volatile-bitfields
-Wno-error=unused-but-set-variable
-fno-jump-tables
-fno-tree-switch-conversion
-std=gnu++11
-fexceptions -fno-rtti
-MMD
-c
-Wall
-Werror=all
-Wextra
-Os
-DF_CPU=240000000L
-DARDUINO=10819
-DARDUINO_ESP32_DEV
-DARDUINO_ARCH_ESP32
“-DARDUINO_BOARD="ESP32_DEV"”
“-DARDUINO_VARIANT="esp32"”
-DARDUINO_PARTITION_min_spiffs
-DESP32
-DCORE_DEBUG_LEVEL=0
-DARDUINO_RUNNING_CORE=1
-DARDUINO_EVENT_RUNNING_CORE=1
-DARDUINO_USB_CDC_ON_BOOT=0
@H:\Temp\arduino_build_158566/build_opt.h”
“-IC:\arduino-1.8.19_ESP32\portable\packages\esp32\hardware\esp32\2.0.6\cores\esp32”
“-IC:\arduino-1.8.19_ESP32\portable\packages\esp32\hardware\esp32\2.0.6\variants\esp32”
“H:\Temp\arduino_build_158566\sketch\tino.ino.cpp”
-o “H:\Temp\arduino_build_158566\sketch\tino.ino.cpp.o”