下列实践面向资源受限 MCU:优先可读、可预测、可测试。 具体寄存器名、启动文件与链接脚本随工具链与芯片而变,请以厂商示例与数据手册为准。

入门:中断与 volatile

ISR(中断服务程序)与主循环/任务共享的变量应使用 volatile(或更安全的原子类型/消息队列),防止编译器优化掉「看似无人写入」的读操作。 ISR 内避免阻塞与耗时计算:只做标记、清标志、搬运最小数据。

入门:栈与堆

  • 首选静态分配与固定大小缓冲;堆(malloc)在多数小型 MCU 工程默认不推荐,除非有明确分配策略与故障注入测试。
  • 栈溢出很难调试:合理设置链接脚本栈大小,必要时填充魔数 pattern 检测。

深入:总线与超时

I2C/SPI/UART 外设通信必须有超时与错误路径;禁止无限等待某标志位。 参考 HAL 库时要理解「阻塞版 vs 非阻塞版」对你的实时性意味着什么。

深入:看门狗与低功耗

喂狗周期必须大于最坏路径执行时间;睡眠模式下中断能否唤醒、外设时钟是否门控,都要对照 RM。

编码习惯(落地清单)

  • 直接写寄存器时注释寄存器名、位域与意图;读-改-写注意原子性与并发。
  • 魔法数字用宏或枚举命名。
  • 模块内符号尽量 static;接口函数单一职责。

MISRA C、CERT C 等编码规范在汽车行业常见;是否采纳取决于团队与认证目标。

与其它主题的衔接

嵌入式地图调试与测量UTF-8(串口日志编码)。