Flash & RAM Budget
Where the 1MB flash and ~23KB heap go, and how to keep the build under the 60% flash / 65% RAM limits.
Flash budget
O flash de 1 MB do ESP8285 é dominado pela WebUI: o build de cliente empacotado tem ~160 KB comprimidos (~16% do flash) após tree-shaking. O runtime de float (_scanf_float, _printf_float, _dtoa_r, _strtod_l …) tem ~9,7 KB — real, mas não é a maior alavanca. A linha de base atual está em ~68,6% de flash; a meta de 60% exige um corte de ~83 KB, e a WebUI é a única alavanca grande o bastante para alcançá-la.
RAM budget
O ESP8285 expõe cerca de 23 KB de heap. O salvamento de configuração nunca deve alocar um grande documento JSON no heap — o gravador de config do ornitóptero grava direto no LittleFS para evitar esgotar o heap e reiniciar no meio do poll. Mantenha DynamicJsonDocument fora do caminho quente; prefira buffers de pilha e gravações diretas.
Optimization tips
- Remova (tree-shake) páginas ELRS-RX não usadas do bundle da WebUI.
- Evite concatenação de
Stringem loops — ela fragmenta o heap. - Transmita JSON para o LittleFS com
File::printem vez de construir documentos. - Mantenha a formatação de float fora do caminho quente da telemetria (inteiros pré-escalados).
- Prefira módulos protegidos por
#ifdef(Zephyrus compila para no-ops quando ausente).
Build targets
| Alvo | Orçamento de flash | Orçamento de RAM |
|---|---|---|
| PteronautOS_ESP8285_2400_RX | ≤ 60% | ≤ 65% |
O manifesto proíbe exceder 60% de flash / 65% de RAM para deixar margem de expansão. Meça após cada recurso; um build verde não é um build vivo até ser gravado e seu log de boot ser lido.