Flash- und RAM-Budget
Wohin 1MB Flash und ~23KB Heap gehen und wie man unter 60% Flash / 65% RAM bleibt.
Flash-Budget
Der 1 MB große ESP8285-Flash wird von der WebUI dominiert: der gebündelte Client-Build ist ~160 KB komprimiert (~16% des Flash) nach Tree-Shaking. Die Float-Runtime (_scanf_float, _printf_float, _dtoa_r, _strtod_l …) ist ~9,7 KB — real, aber nicht der größte Hebel. Die aktuelle Basis liegt bei ~68,6% Flash; das 60%-Ziel braucht eine Kürzung um ~83 KB, und die WebUI ist der einzige Hebel, der groß genug dafür ist.
RAM-Budget
Der ESP8285 stellt grob 23 KB Heap bereit. Config-Saves dürfen niemals ein großes JSON-Dokument auf dem Heap anlegen — der Ornithopter-Config-Saver streamt direkt nach LittleFS, um den Heap nicht zu erschöpfen und mitten im Poll neu zu booten. Halte DynamicJsonDocument aus dem heißen Pfad; bevorzuge Stack-Buffer und direkte Schreibvorgänge.
Optimierungs-Tipps
- Shake ungenutzte ELRS-RX-Seiten aus dem WebUI-Bundle.
- Vermeide
String-Verkettung in Schleifen — sie fragmentiert den Heap. - Streame JSON mit
File::printnach LittleFS, statt Dokumente zu bauen. - Halte Float-Formatierung aus dem Telemetrie-Hot-Path (vorskaliere Ganzzahlen).
- Bevorzuge
#ifdef-gegated Module (Zephyrus kompiliert bei Abwesenheit zu No-ops).
Build-Ziele
| Ziel | Flash-Budget | RAM-Budget |
|---|---|---|
| PteronautOS_ESP8285_2400_RX | ≤ 60% | ≤ 65% |
Das Manifest verbietet, 60% Flash / 65% RAM zu überschreiten, um Expansionsspielraum zu lassen. Miss nach jedem Feature; ein grüner Build ist erst dann ein lebender Build, wenn er geflasht und sein Boot-Log gelesen ist.