跳到主要内容

Flash 优化

八种开关组合覆盖从超精简到功能完整的全范围需求。

配置矩阵(ATmega328P,avr-gcc -Os)

配置OSRX_NO_PARSEROSRX_NO_TIMESTAMPOSRX_VALIDATE_CRC8OSRX_VALIDATE_CRC16FlashRAM
完整默认0011~616 B102 B
无时间戳0111~596 B98 B
无 CRC80001~536 B102 B
无 CRC8 + 无时间戳0101~516 B98 B
无解析器1011~442 B0 B
无解析器 + 无时间戳1111~422 B0 B
无解析器 + 无 CRC81001~362 B0 B
Ultra(全关闭)1100~280 B0 B

各开关使用建议

OSRX_NO_PARSER=1 — 收益最大。禁用 OSRXParser,节省 316 B Flash + 102 B RAM。ATtiny85 / ATmega48 必须启用。

OSRX_NO_TIMESTAMP=1 — 风险低。从 meta 结构体中移除 ts_sec,节省 20 B Flash + 4 B RAM。不需要时间戳时可安全启用。

OSRX_VALIDATE_CRC8=0 — 中等风险。跳过 body CRC-8 校验,接受损坏的 body。仅在无噪声链路上使用。

OSRX_VALIDATE_CRC16=0 — 高风险。跳过整帧 CRC-16 校验。任何生产环境均不推荐。

CRC 权衡

逐位 CRC 实现每种 CRC 算法耗费约 80 B Flash 和 0 B RAM。查找表实现速度更快,但 CRC-8 需要 256 B RAM,CRC-16 需要 512 B RAM——在 512 B–1 KB 总 RAM 的设备上完全不可接受。