플래시 및 RAM 예산
1MB 플래시와 ~23KB 힙이 어디로 가는지, 그리고 60% 플래시 / 65% RAM 이하로 유지하는 방법.
플래시 예산
1 MB ESP8285 플래시는 WebUI가 지배합니다. 번들 클라이언트 빌드는 트리셰이킹 후 ~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 번들에서 사용하지 않는 ELRS-RX 페이지를 트리셰이킹하세요.
- 루프에서
String연결을 피하세요. 힙을 단편화합니다. - 문서를 만드는 대신
File::print로 JSON을 LittleFS에 스트리밍하세요. - 텔레메트리 핫 경로에서 부동소수점 포맷을 제외하세요(미리 스케일된 정수 사용).
#ifdef로 게이트된 모듈을 선호하세요(부재 시 Zephyrus는 no-op으로 컴파일됨).
빌드 타겟
| 대상 | 플래시 예산 | RAM 예산 |
|---|---|---|
| PteronautOS_ESP8285_2400_RX | ≤ 60% | ≤ 65% |
매니페스트는 확장 여유를 남기려 플래시 60% / RAM 65% 초과를 금지합니다. 각 기능 후 측정하세요. 그린 빌드는 플래시되고 부트 로그를 읽기 전까지 살아있는 빌드가 아닙니다.