Size overflow issue in IRAM: Not enough place for my own program <SOLVED by Angus>
Posted: Tue Jul 13, 2021 10:22 am
Hi there,
I've find out that when I try to use RainMaker with my epaper Firmware, using a display buffer bigger than 80/100Kb is already giving me problems. When I do idf.py build
/home/martin/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: region `iram0_0_seg' overflowed by 25320 bytes
If I see this correctly is failing since it's about 25 Kb too big. So it's not about RAM since I'm initializing the _buffer directly in PSRAM:
This problem is gone if I compile this on a branch without RainMaker WiFi provisioning. My question is: There is any way to place BLE libraries directly on PSRAM or similar?
I see an option that compiles WiFi libraries in SPI Ram but it does not make any difference. Is still giving the same overflow in the build process after checking that option in idf.py menuconfig
Any ideas how I can solve this?
Just as a reference, this is the CPP file that is my main program:
https://github.com/martinberlin/cale-id ... r-wifi.cpp
For further info this are my partitions:
And here the report from make size-components
I've find out that when I try to use RainMaker with my epaper Firmware, using a display buffer bigger than 80/100Kb is already giving me problems. When I do idf.py build
/home/martin/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: region `iram0_0_seg' overflowed by 25320 bytes
If I see this correctly is failing since it's about 25 Kb too big. So it's not about RAM since I'm initializing the _buffer directly in PSRAM:
Code: Select all
uint8_t* _buffer = (uint8_t*)heap_caps_malloc(WAVE5I7COLOR_BUFFER_SIZE, MALLOC_CAP_SPIRAM);
I see an option that compiles WiFi libraries in SPI Ram but it does not make any difference. Is still giving the same overflow in the build process after checking that option in idf.py menuconfig
Any ideas how I can solve this?
Just as a reference, this is the CPP file that is my main program:
https://github.com/martinberlin/cale-id ... r-wifi.cpp
For further info this are my partitions:
Code: Select all
# Note: Firmware partition offset needs to be 64K aligned, initial 36K (9 sectors) are reserved for bootloader and partition table
sec_cert, 0x3F, ,0xd000, 0x3000, , # Never mark this as an encrypted partition
nvs, data, nvs, 0x10000, 0x6000,
otadata, data, ota, , 0x2000
phy_init, data, phy, , 0x1000,
ota_0, app, ota_0, 0x20000, 1600K,
ota_1, app, ota_1, , 1600K,
fctry, data, nvs, 0x340000, 0x6000
Code: Select all
Total sizes:
DRAM .data size: 19612 bytes
DRAM .bss size: 32432 bytes
Used static DRAM: 52044 bytes ( 72536 available, 41.8% used)
Used static IRAM: 1027 bytes ( 130045 available, 0.8% used)
Flash code: 1154451 bytes
Flash rodata: 311828 bytes
Total image size:~1486918 bytes (.bin may be padded larger)
Per-archive contributions to ELF file:
Archive File DRAM .data & .bss & other IRAM D/IRAM Flash code & rodata Total
libbt.a 228 12803 0 0 0 268970 75021 357022
libnet80211.a 1267 6041 0 0 0 108628 18435 134371
liblwip.a 25 3891 0 0 0 105993 16249 126158
libc.a 1355 54 0 0 0 89977 8665 100051
libmbedcrypto.a 64 81 0 0 0 86790 11762 98697
libbtdm_app.a 773 2573 0 0 0 69839 4551 77736
libwpa_supplicant.a 12 848 0 0 0 44702 3760 49322
libesp_rainmaker.a 12 126 0 0 0 23528 23418 47084
libpp.a 2427 1292 0 0 0 37226 4704 45649
libphy.a 1436 715 0 0 0 33149 0 35300
libmbedtls.a 60 200 0 0 0 28447 5206 33913
libesp32.a 16 89 0 0 0 13664 16489 30258
libwifi_provisioning.a 4 12 0 0 0 13224 12710 25950
libdriver.a 232 106 0 0 0 15258 9054 24650
libnghttp.a 0 0 0 0 0 15604 4084 19688
libnvs_flash.a 0 24 0 0 0 16565 3019 19608
librmaker_common.a 12 26 0 0 0 4135 15231 19404
libprotocomm.a 1 39 0 0 0 9680 9330 19050
libmqtt.a 4 0 0 0 0 13922 4013 17939
libprotobuf-c.a 12 0 0 0 0 12075 1616 13703
libtcp_transport.a 0 0 0 0 0 9253 3022 12275
libesp_http_client.a 0 0 0 0 0 9397 2717 12114
libmbedx509.a 0 0 0 0 0 8931 2089 11020
libesp_system.a 278 206 0 0 0 6404 3928 10816
libfreertos.a 3112 1044 0 425 0 413 4632 9626
libqrcode.a 0 0 0 0 0 6970 2488 9458
libesp-tls.a 0 4 0 0 0 5736 3463 9203
libvfs.a 308 48 0 0 0 8160 602 9118
libesp_hw_support.a 256 40 0 0 0 6117 2562 8975
libesp_netif.a 12 25 0 0 0 6284 2378 8699
libesp_wifi.a 572 57 0 0 0 5092 2772 8493
libmain.a 9 760 0 0 0 4197 2737 7703
libesp_common.a 0 0 0 0 0 53 6957 7010
libcoexist.a 1816 33 0 0 0 4713 325 6887
libgcc.a 8 12 0 0 0 5924 872 6816
libCalEPD.a 0 3 0 0 0 2967 3086 6056
libesp_schedule.a 0 5 0 0 0 4000 2019 6024
libspi_flash.a 1538 294 0 0 0 2149 1819 5800
libbootloader_support.a 0 4 0 0 0 3701 1416 5121
libesp_event.a 0 4 0 0 0 3815 1211 5030
libhal.a 136 0 0 0 0 3290 1442 4868
libheap.a 1965 8 0 0 0 1523 777 4273
libesp_https_ota.a 0 0 0 0 0 2459 1647 4106
libstdc++.a 8 20 0 0 0 2686 1044 3758
libAdafruit-GFX.a 0 0 0 0 0 2257 1387 3644
libapp_update.a 1 20 0 0 0 2467 1096 3584
libsoc.a 0 0 0 0 0 543 2994 3537
libjson_parser.a 0 0 0 0 0 2428 817 3245
libjson.a 12 0 0 0 0 3091 42 3145
libefuse.a 64 4 0 0 0 1307 807 2182
libesp_timer.a 32 24 0 0 0 1218 757 2031
libnewlib.a 190 272 0 0 0 1268 151 1881
liblog.a 8 272 0 0 0 887 144 1311
libpthread.a 16 12 0 0 0 815 459 1302
libxtensa.a 1024 0 0 0 0 210 35 1269
libjson_generator.a 0 0 0 0 0 1105 42 1147
libcore.a 0 33 0 0 0 615 228 876
libesp_ipc.a 0 56 0 0 0 474 89 619
libesp_ringbuf.a 0 0 0 0 0 0 512 512
libtcpip_adapter.a 0 17 0 0 0 240 0 257
libxt_hal.a 0 0 0 0 0 0 32 32
(exe) 0 0 0 3 0 3 12 18
libcxx.a 0 0 0 0 0 11 0 11
libesp_pm.a 0 0 0 0 0 8 0 8
librtc.a 0 4 0 0 0 0 0 4
libesp_eth.a 0 0 0 0 0 0 0 0
libesp_rom.a 0 0 0 0 0 0 0 0
libmesh.a 0 0 0 0 0 0 0 0