Keil调试技巧-利用仿真找出程序死机的地方

作者在调试程序时发现板子因手接近某区域而死机,排查了硬件短路问题后,通过Keil仿真定位到问题在于UART2中断处理中未清除中断标志位,导致单片机进入中断循环。解决方法是检查中断函数并确保正确清除中断标志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我遇到的问题:

程序下载到实验板后,我的手一伸到板子的某处区域的上方,板子就死机了,板子上做了一秒闪烁一次的主板LED小灯也不闪烁了,停止了。

查找问题:

  1. 怀疑是板子上连接的杜邦线太多太乱,其中有短路造成。然后拔掉了所有杜邦线,但问题依旧。

  1. 怀疑是面包板坏了,有些区域联通了,短接了,造成死机。然后去掉了面包板,但问题依旧。

问题解决:

在keil中下载一次程序后,再进入仿真。然后手伸到板子某处区域的上方,板子死机。

重点!!!此时,点击红色x号,退出仿真,keil就会停留在死机处的对应代码那里!!!

顺利找到原因:

我写了UART2中断,但是中断里面忘记写清除中断标志位了。然后我的手一伸到板子的UART2相关引脚的上方,单片机受到干扰,就误以为UART2有数据接收,然后进入接收中断函数,然后就出不来了。。。

经验:

  1. 单片机死机,优先查看中断函数,先怀疑是不是死在中断里出不来了。

  1. Keil仿真,在死机时,点击红色x号退出仿真,keil会停留在最后仿真的区域,即死机对应的代码处。

(仿真前,记得先下载一次程序。)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值