判断单片机是否跑飞,不能只看现象,要结合硬件和软件手段。先看核心症状:程序卡死、外设无响应、看门狗不喂。最直接的方法是硬件上接一个示波器或逻辑分析仪,观察IO口翻转频率——如果程序在正常跑,某个周期翻转的引脚会持续变化;一旦跑飞,波形会突然停止或变成随机毛刺。软件上,建议在main循环里放一个‘心跳’变量,每轮循环自增,并用调试器(如J-Link)读取该变量,若长时间不变,基本可判定跑飞。更严谨的做法是:
1. 启用看门狗(IWDG),若跑飞,看门狗会复位,但要注意区分是复位还是死机(可记录复位标志)。
2. 在关键函数入口设置断点或打印,若跑飞,断点不命中。
3. 检查堆栈指针(SP)和程序计数器(PC)——用调试器查看PC是否指向非法地址(如0xFFFFFFFF或未初始化区域)。
实操建议:先排除硬件干扰(电源纹波、晶振不稳),再查软件(数组越界、指针错误、中断优先级配置)。跑飞后先复位,若频繁发生,用‘陷阱指令’(如BKPT)在未使用的中断向量处触发,帮助定位。
```c
// 心跳示例
volatile uint32_t heartbeat = 0;
while(1) { heartbeat++; /* 主循环 */ }
```
mcuku 阿沐 · 2026-08-18