Flash与RAM预算
1MB Flash和~23KB堆的去向,以及如何将构建保持在60% Flash/65% RAM以下。
Flash预算
1 MB 的 ESP8285 闪存主要由 WebUI 占据:打包后的客户端构建在 tree-shaking 后约 160 KB 压缩(约闪存的 16%)。浮点运行时(_scanf_float、_printf_float、_dtoa_r、_strtod_l …)约 9.7 KB——真实存在但并非最大的杠杆。当前基线约 68.6% 闪存;60% 的目标需要约 83 KB 的削减,而 WebUI 是唯一大到足以实现这一点的杠杆。
RAM预算
ESP8285 暴露大约 23 KB 的堆。配置保存绝不能在堆上分配大型 JSON 文档——扑翼机配置保存器直接流式写入 LittleFS,以避免耗尽堆并在轮询中途重启。请让 DynamicJsonDocument 远离热路径;优先使用栈缓冲与直接写入。
优化技巧
- 从 WebUI 包中 tree-shake 掉未使用的 ELRS-RX 页面。
- 避免在循环中拼接
String——它会使堆碎片化。 - 用
File::print将 JSON 流式写入 LittleFS,而不是构建文档。 - 让浮点格式化远离遥测热路径(使用预缩放整数)。
- 优先使用
#ifdef门控模块(Zephyrus 在缺失时编译为 no-op)。
构建目标
| 目标 | 闪存预算 | RAM 预算 |
|---|---|---|
| PteronautOS_ESP8285_2400_RX | ≤ 60% | ≤ 65% |
清单禁止超过 60% 闪存 / 65% RAM,以留出扩展余量。每增加一个功能后都要测量;绿色的构建只有在烧录并读取其启动日志之后,才算真正“活着”的构建。