下列实践面向资源受限 MCU:优先可读、可预测、可测试。 具体寄存器名、启动文件与链接脚本随工具链与芯片而变,请以厂商示例与数据手册为准。
入门:中断与 volatile
ISR(中断服务程序)与主循环/任务共享的变量应使用 volatile(或更安全的原子类型/消息队列),防止编译器优化掉「看似无人写入」的读操作。
ISR 内避免阻塞与耗时计算:只做标记、清标志、搬运最小数据。
入门:栈与堆
- 首选静态分配与固定大小缓冲;堆(malloc)在多数小型 MCU 工程默认不推荐,除非有明确分配策略与故障注入测试。
- 栈溢出很难调试:合理设置链接脚本栈大小,必要时填充魔数 pattern 检测。
深入:总线与超时
I2C/SPI/UART 外设通信必须有超时与错误路径;禁止无限等待某标志位。 参考 HAL 库时要理解「阻塞版 vs 非阻塞版」对你的实时性意味着什么。
深入:看门狗与低功耗
喂狗周期必须大于最坏路径执行时间;睡眠模式下中断能否唤醒、外设时钟是否门控,都要对照 RM。
编码习惯(落地清单)
- 直接写寄存器时注释寄存器名、位域与意图;读-改-写注意原子性与并发。
- 魔法数字用宏或枚举命名。
- 模块内符号尽量
static;接口函数单一职责。
MISRA C、CERT C 等编码规范在汽车行业常见;是否采纳取决于团队与认证目标。