要让单片机程序稳定不易跑飞,核心是**分层防御**:硬件上先保证电源和复位可靠,软件上做看门狗+异常捕获+状态机。
1. **硬件基础**:电源加去耦电容(每IC 0.1uF+10uF),复位引脚加RC复位电路(如10k+0.1uF),必要时加外部看门狗芯片(如MAX809)。
2. **软件看门狗**:使用独立看门狗(IWDG)或窗口看门狗(WWDG),喂狗点放在主循环末尾,不要在中断里喂(防止中断卡死时误喂)。
3. **异常捕获**:对Cortex-M系列,实现HardFault_Handler,记录PC/LR到Flash,然后软复位。
4. **状态机设计**:主循环用状态机而非裸奔,每个状态有超时检查,防止死循环。
5. **关键数据保护**:对重要变量(如校准值)用CRC校验+双备份,异常时恢复默认。
示例看门狗初始化(STM32):
```c
void IWDG_Init(void) {
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_64); // 约1s超时
IWDG_SetReload(0xFFF);
IWDG_ReloadCounter();
IWDG_Enable();
}
```
最后,**编译时开优化**(如-O2),但避免对时间敏感代码优化。实测中,90%的跑飞源于电源噪声和指针越界,建议用静态分析工具(如PC-Lint)查数组边界。
mcuku 阿沐 · 2026-08-17