IRAM0 segment data does not fit
Posted: Fri Dec 14, 2018 1:29 pm
I am looking for advise as to how to reduce IRAM footprint and/or reallocate more.
Presently I have; Wifi, Ethernet, BLE, SDCARD and use CAN, SPI, I2C, RMT.
I will be adding SPIFFS, mDNS, HTTP and an MQTT broker if I can find one.
The story so far using v3.2-beta1-34-gfb7ba1baa
Integrated my standalone BLE server into the main build and receive the dreaded:
Modified esp32.ld and bumped IRAM to 0x40000 allowing:
Its surprising how quick the figures add up. There seem to be some greedy IDF libraries. I have barely used 100 bytes.
How should I proceed? For example librtc used 2346 and I am fairly sure I do not use it, not directly at least.
Presently I have; Wifi, Ethernet, BLE, SDCARD and use CAN, SPI, I2C, RMT.
I will be adding SPIFFS, mDNS, HTTP and an MQTT broker if I can find one.
The story so far using v3.2-beta1-34-gfb7ba1baa
Integrated my standalone BLE server into the main build and receive the dreaded:
Code: Select all
ld.exe: IRAM0 segment data does not fit.
ld.exe: region `iram0_0_seg' overflowed by 1708 bytes
Code: Select all
make -j8 size-components
DRAM .data size: 14624 bytes
DRAM .bss size: 44920 bytes
Used static DRAM: 59544 bytes ( 65036 available, 47.8% used)
Used static IRAM: 132780 bytes ( 129364 available, 50.7% used)
Flash code: 964264 bytes
Flash rodata: 280584 bytes
Total image size:~1392252 bytes (.bin may be padded larger)
Per-archive contributions to ELF file:
Archive File DRAM .data & .bss IRAM Flash code & rodata Total
libbt.a 366 26459 1230 362968 81866 472889
libstdc++.a 148 4268 0 113026 64795 182237
liblwip.a 19 3857 0 111924 17132 132932
libc-psram-workaround.a 1744 32 14197 104751 5351 126075
libesp32.a 2498 2645 23850 27761 29503 86257
libdriver.a 135 171 7716 38910 32164 79096
libbtdm_app.a 255 2261 17885 44543 3819 68763
libphy.a 1284 915 5710 29030 0 36939
libfreertos.a 4156 776 21294 0 2320 28546
libfatfs.a 4 47 0 20935 1314 22300
libnvs_flash.a 0 32 0 16599 3345 19976
libtests.a 0 0 0 14165 4108 18273
libsdmmc.a 0 0 0 11263 4192 15455
libsoc.a 161 4 7976 889 4230 13260
libble_server.a 534 66 0 3501 9098 13199
libcandriver.a 0 0 0 10640 2309 12949
libspi_flash.a 36 323 9182 1546 1760 12847
libethernet.a 8 343 508 8943 2498 12300
libheap.a 1378 34 7325 1805 968 11510
libvfs.a 240 103 0 7659 583 8585
libcoexist.a 1365 115 4352 1666 0 7498
libgcc.a 4 20 104 5556 888 6572
libhwci.a 0 60 78 4102 1556 5796
libesp_ringbuf.a 0 0 4716 0 459 5175
libmain.a 0 0 0 2813 1824 4637
libtcpip_adapter.a 0 124 0 3789 408 4321
libnewlib.a 152 272 1517 1597 191 3729
libpthread.a 16 12 599 1571 718 2916
libleds.a 0 0 0 2433 349 2782
librtc.a 0 4 2346 0 0 2350
libnet80211.a 12 1021 20 370 917 2340
liblog.a 8 268 596 1285 134 2291
libcxx.a 12 16 0 1105 489 1622
libsmartconfig_ack.a 0 1 0 930 312 1243
liblogger.a 4 516 0 330 102 952
libapp_update.a 0 4 0 199 745 948
libhal.a 0 0 515 0 32 547
libwpa_supplicant.a 0 0 0 146 0 146
libxtensa-debug-module.a 0 0 46 0 0 46
libbootloader_support.a 0 0 0 0 0 0
libcore.a 0 0 0 0 0 0
libextflash.a 0 0 0 0 0 0
libflash.a 0 0 0 0 0 0
libmbedtls.a 0 0 0 0 0 0
libmesh.a 0 0 0 0 0 0
libpp.a 0 0 0 0 0 0
libwpa.a 0 0 0 0 0 0
libwpa2.a 0 0 0 0 0 0
libwps.a 0 0 0 0 0 0
How should I proceed? For example librtc used 2346 and I am fairly sure I do not use it, not directly at least.