你的程序有跑飞了?(HardFaultException)

哈!
在使用单片机的时候,常常遇到单片机跑着跑着就不跑了,跑飞了或者死机了。

见下:

void HardFaultException(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}

有时候是比较恼火的,特别是在客户现场的时候。>>>你懂得。。。。。。
今天主要讲如何一步一步排查问题(方法论-自行理解)

1,先仔细观察现象,大致定位问题,观察死机是否有一定规律,比如是否是上电就跪(大概率硬件),还是运行一会或者不定时间就跪(大概率硬件),或者是触发了某个条件才跪,比如升级,比如中断等等((大概率软件)。总之遇到这种问题,先耐心找死机规律吧!

2,如果大致怀疑硬件问题,则多找几块硬件板子测试同一个跑飞程序,先排除硬件是否有问题,必要的时候要找开发板或者出问题的板子进行拆功能测试,一部分一部分功能拆下来测试,此刻程序不变,当只剩下最小系统时,如果还在问题复现,那么重点排查复位电路,晶振电路,起振电容,BOOT电路,特殊管脚的输入输出电路。找不出问题再找个官方或者代理商的开发板(或最小系统来),如果问题依旧的话,那么大概率是软件问题。

3,如果大致怀疑软件问题,那么阔以先用同样的程序仿真运行,看看死机的位置(PC,LR),观察这些位置是否每次都是固定的。也就是死机的位置是不是都是某一个同样函数,或者数组。大概率是软件上用了某个指针,某个取地址之类的骚操作容易引起。如果不是那么还要继续排查,这个就要熟练应用仿真工具,你用什么编译环境就看看有木有对应的仿真手段,如果不好搞,那么就得用LED或者printf或者DAC来搞咯,总之要通过观察某一现象你才能判断程序走到哪里去咯。这样还找不到位置,那么就缩减程序功能,一个一个外设功能跟着关闭,比如阔以不先关初始化,关闭外设的调用功能,让程序变的越来越简单,就像剃树枝一样,剃到某个时刻真相自然会大白。当去掉某个功能后问题不在复现,那么就再加上这个功能反复验证。

这样就能找到问题所在!你学会了吗???
参考仿真调试界面:
在这里插入图片描述

4,总之就是多对比对比,无限对比法,从大往小对比,总能找到问题,现在的年轻工程师需要耐心和定力,加油!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓑衣客VS索尼克

感谢支持原创,感谢原创支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值