[其它应用] 如何判断单片机程序是否跑飞了?

[复制链接]
2069|14
 楼主| 瞌睡虫本虫 发表于 2025-3-10 20:00 | 显示全部楼层 |阅读模式
程序跑飞是指程序执行异常,导致系统失控。
tpgf 发表于 2025-4-8 10:11 | 显示全部楼层
如果启用了看门狗(WDT)且系统定期喂狗,看门狗复位是程序跑飞的直接证据
夜幕叙事曲 发表于 2025-4-8 10:25 | 显示全部楼层
除了看门狗,还是看门狗。
因为程序并不知道自己跑飞了
guanjiaer 发表于 2025-4-8 12:39 | 显示全部楼层
对重要全局变量设置范围检查

使用CRC或校验和验证关键数据结构的完整性
probedog 发表于 2025-4-8 13:47 | 显示全部楼层
程序跑飞导致无法喂狗,看门狗会触发复位。
laocuo1142 发表于 2025-4-8 13:48 | 显示全部楼层
通过复位标志位检查是否由看门狗复位。
flycamelaaa 发表于 2025-4-8 13:48 | 显示全部楼层
堆栈溢出可能导致程序跑飞。
powerantone 发表于 2025-4-8 15:00 | 显示全部楼层
在堆栈末尾设置“哨兵”值,定期检查是否被覆盖。
classroom 发表于 2025-4-8 17:20 | 显示全部楼层
避免高优先级中断长时间占用CPU,导致低优先级中断无法执行。
stormwind123 发表于 2025-4-8 18:00 | 显示全部楼层
跑飞可能导致外设配置错误。例如,串口可能持续发送垃圾数据,GPIO可能输出异常电平。
磨砂 发表于 2025-4-8 18:03 | 显示全部楼层
异常的电平波动可能表明程序失控,使用示波器监测复位引脚电压
probedog 发表于 2025-4-8 19:00 | 显示全部楼层
读取复位源寄存器,判断是否由跑飞触发。
晓伍 发表于 2025-4-8 19:57 | 显示全部楼层
可选微跟踪缓冲(MTB)用于低成本调试
八层楼 发表于 2025-4-8 21:50 | 显示全部楼层
定期翻转的GPIO引脚停止变化,通信接口(UART、SPI等)停止收发数据
观海 发表于 2025-4-9 17:51 | 显示全部楼层
通过软件进行检测:
// 在主循环中设置心跳标志
volatile uint32_t heartbeat = 0;

while(1) {
    heartbeat++;
    // ...正常程序逻辑...
    if(heartbeat > MAX_COUNT) {
        // 超时处理
    }
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

216

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部