Бюджет Flash и RAM
Куда уходят 1 МБ flash и ~23 КБ кучи, и как удержать сборку ниже 60% flash / 65% RAM.
Бюджет Flash
Флэш ESP8285 на 1 МБ в основном занят WebUI: собранный клиентский бандл ~160 КБ в сжатом виде (~16% флэша) после tree-shaking. Рантайм float (_scanf_float, _printf_float, _dtoa_r, _strtod_l …) — ~9,7 КБ, реально, но не главный рычаг. Текущая база ~68,6% флэша; цель 60% требует сокращения на ~83 КБ, и WebUI — единственный достаточно большой рычаг для этого.
Бюджет RAM
ESP8285 предоставляет примерно 23 КБ кучи. Сохранение конфигурации никогда не должно выделять большой JSON-документ в куче — сохранитель конфигурации орнитоптера пишет напрямую в LittleFS, чтобы не исчерпать кучу и не перезагрузиться посреди опроса. Держите DynamicJsonDocument вне горячего пути; предпочитайте буферы стека и прямую запись.
Советы по оптимизации
- Удаляйте (tree-shake) неиспользуемые страницы ELRS-RX из бандла WebUI.
- Избегайте конкатенации
Stringв циклах — она фрагментирует кучу. - Потоковая запись JSON в LittleFS через
File::printвместо построения документов. - Держите форматирование float вне горячего пути телеметрии (предварительно масштабированные целые).
- Предпочитайте модули за
#ifdef(Zephyrus компилируется в no-op при отсутствии).
Сборочные цели
| Цель | Бюджет флэша | Бюджет ОЗУ |
|---|---|---|
| PteronautOS_ESP8285_2400_RX | ≤ 60% | ≤ 65% |
Манифест запрещает превышать 60% флэша / 65% ОЗУ, чтобы оставить запас на расширение. Измеряйте после каждой функции; зелёная сборка не является живой, пока не прошита и не прочитан её лог загрузки.