嵌入式 C 编程:提高程序可靠性的实用原则

嵌入式 C 程序直接面对寄存器、中断、有限内存和长期运行环境,因此“能够运行”只是最低要求,真正重要的是行为可预测、故障可定位。

首先要明确数据类型和取值范围。涉及协议、寄存器和存储格式时,优先使用固定宽度整数类型,并警惕有符号与无符号混用、整数溢出以及隐式类型转换。数组访问必须检查边界,指针使用前要验证有效性。

共享变量需要考虑并发。主循环、中断和 RTOS 任务可能同时访问数据,volatile 只能保证读写不会被优化掉,并不能代替原子操作、临界区或互斥锁。中断服务函数应尽量短,只完成必要采集与通知。

接口设计应体现失败路径。函数返回值要能区分成功、超时、参数错误和硬件故障;通信与存储操作需要超时机制,避免无限等待。对外部输入进行长度、范围和校验验证,不默认设备永远正常。

最后,把编译警告提升到错误级别,使用静态检查、单元测试和硬件在环测试。为关键状态保留日志与断言,并通过看门狗和安全状态保证异常发生时设备可以恢复。

本文整理自个人 Obsidian 学习笔记。