* Right-size nRF52 heap tiers after 2.8.0 heap-exhaustion field reports Field reports on 2.8.0 show nRF52840 devices at 99% heap (114/115 KB) within minutes of boot; operator new asserts on OOM, so these devices are one allocation from a reboot. The 2.8.0 cache sizing ladders gave nRF52 the largest non-PSRAM tiers on the assumption that a BLE-only part has a roomy heap - the arena is actually ~125 KB shared with the FreeRTOS task stacks. Per-target retiers (nRF52840 unless noted): - Traffic Management cache 1000 -> 250 entries (10 KB -> 2.5 KB); the unclassified fallthrough drops 1000 -> 400 to match the classic-ESP32 tier (also affects RP2040/RP2350) - Warm node store 200 -> 100 entries (8 KB -> 4 KB); the non-XXAA fallthrough drops 320 -> 100 so an unclassified RAM-constrained part can't boot-allocate 12.8 KB - MESSAGE_HISTORY_LIMIT 20 -> 10 (text pool 4.4 KB -> 2.2 KB), the tier classic ESP32 already ships - MAX_RX_TOPHONE 32 -> 16, shrinking the static packet pool 70 -> 54 slots (~6.6 KB of .bss returned to the heap arena) - PacketHistory hash index off arch-wide (1 KB); O(n) over 240 records is negligible at LoRa packet rates - OLEDDISPLAY_REDUCE_MEMORY arch-wide (~1 KB OLED back buffer); the five TFT variants -U it because TFTDisplay.cpp needs buffer_back for dirty-window diffing - Drop the stale "for testing" 1024-entry TMM override on T1000-E Measured on rak4631: heap arena grows 124,572 -> 131,180 B and boot allocations drop ~15.7 KB, roughly +22 KB free heap on the field-report device class. Migration: the nRF52840 warm flash ring replays through place() (LRU), so the newest 100 identities survive the shrink; the file backend rejects oversized snapshots cleanly (new test covers this). Native suites pass (536/536 Docker, 13/13 native-macos warm store); rak4631, heltec-mesh-node-t114 (TFT) and tracker-t1000-e build green. * Drop stale OLEDDISPLAY_REDUCE_MEMORY -U on t114 / mesh-solar-tft Only USE_TFTDISPLAY variants (t1, t096, wismeshtap) compile TFTDisplay.cpp and need the lib's buffer_back; t114 and mesh-solar-tft render through the meshtastic-st7789 driver, which handles the reduced-memory configuration fine - as #10894 (merged from develop) already established by defining the flag there. Remove the -U guard and the per-variant -D (redundant with the arch-wide define in nrf52_base on this branch). Both variants verified building.
60 lines
2.3 KiB
INI
60 lines
2.3 KiB
INI
[nrf52_base]
|
|
; Instead of the standard nordicnrf52 platform, we use our fork which has our added variant files
|
|
platform =
|
|
# renovate: datasource=custom.pio depName=platformio/nordicnrf52 packageName=platformio/platform/nordicnrf52
|
|
platformio/nordicnrf52@10.12.0
|
|
extends = arduino_base
|
|
platform_packages =
|
|
; our custom Git version with C++17 support in platform.txt
|
|
# TODO renovate
|
|
platformio/framework-arduinoadafruitnrf52 @ https://github.com/meshtastic/Adafruit_nRF52_Arduino#master
|
|
; Don't renovate toolchain-gccarmnoneeabi
|
|
platformio/toolchain-gccarmnoneeabi@~1.90301.0
|
|
|
|
extra_scripts =
|
|
${env.extra_scripts}
|
|
extra_scripts/nrf52_extra.py
|
|
pre:extra_scripts/nrf52_lto.py
|
|
extra_scripts/nrf52_warm_region.py ; post-link guard: image must end below the 12 KB warm-store raw-flash region at 0xEA000-0xED000
|
|
|
|
build_type = release
|
|
build_flags =
|
|
-include variants/nrf52840/cpp_overrides/lfs_util.h
|
|
${arduino_base.build_flags}
|
|
-Wno-unused-variable
|
|
-Isrc/platform/nrf52
|
|
-DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
|
|
-DMESHTASTIC_EXCLUDE_AUDIO=1
|
|
-DMESHTASTIC_EXCLUDE_PAXCOUNTER=1
|
|
-DMESHTASTIC_EXCLUDE_PKT_HISTORY_HASH=1 ; drop PacketHistory's 1 KB hash index; O(n) over ~240 records is negligible at LoRa packet rates
|
|
-DOLEDDISPLAY_REDUCE_MEMORY ; drop the ThingPulse OLED back buffer (~1 KB); TFT variants must -U this (TFTDisplay.cpp needs buffer_back)
|
|
-Os
|
|
-std=gnu++17
|
|
-flto ; whole-image LTO (~-60KB) on every nrf52840 target; nrf52_lto.py (pre: extra_script) keeps the interrupt handlers out of LTO so they survive
|
|
-fmerge-all-constants ; fold identical constants image-wide (~0.7KB; same flag stm32 uses)
|
|
build_unflags =
|
|
-Ofast
|
|
-Og
|
|
-ggdb3
|
|
-ggdb2
|
|
-g3
|
|
-g2
|
|
-g
|
|
-g1
|
|
-g0
|
|
-std=c++11
|
|
-std=gnu++11
|
|
|
|
build_src_filter =
|
|
${arduino_base.build_src_filter} +<platform/nrf52/> -<nimble/> -<mesh/wifi/> -<mesh/api/> -<mesh/http/> -<modules/esp32> -<mesh/eth/> -<mesh/raspihttp> -<serialization/>
|
|
|
|
lib_deps=
|
|
${arduino_base.lib_deps}
|
|
${radiolib_base.lib_deps}
|
|
# renovate: datasource=github-tags depName=meshtastic/Crypto packageName=meshtastic/Crypto
|
|
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
|
|
|
lib_ignore =
|
|
BluetoothOTA
|
|
lvgl
|