嵌入式系统异常处理- 这篇主要讲述我解决了一个棘手的问题

两台新品共用同一系统,只是局部逻辑略有不同。在测试过程中,发现存在硬件或者软件复位情况。出现这种问题最为致命,因为需要排查的因素太多了。以下是我排查问题的思路:

1.数组越界。定义的数组只有50个单元,但是程序运行的过程中,却给他赋给50+个单元。

2.中断耗时太长,刚出中断又进去了.这时的现象是程序一直在中断中执行,回不到主函数。 (中断嵌套)

3.中断或主函数中有死循环。

4.堆栈溢出。可以用static来避免

5.保证Vcc大于1.8V。当电压低至0.8V时,程序仍有可能执行。这时的现象是PC指针乱飞,有复位,死机,停在中断,时钟频率发生变化等现象。

6.程序中使用malloc()函数没有释放。

7.开了中断却没有中断入口。

8.程序编译没问题,下载程序后上电不断复位,该问题是由于WDT造成的(RAM的初始化时间大于WDT默认的32MS时间,因此根本原因是初始化的时间过长,超过了看门狗的时间,初始化完成以后才能进入main函数,这时喂狗已经来不及了。

当这些问题我从头到尾一一都做了详细的检测后,仍然没找到问题。也不是以上问题所导致的,出现了我的知识盲区。我开始一行一行的排查就这样排查了四天,仍是没找到问题出现的原因。就在刚刚我试着把100us的定时中断换成了1ms,让蓝牙500ms发一帧数据,死机的情况在就没出现。我知道了问题出现的原因:

一边在处理定时器的中断,一边在处理蓝牙接收中断,导致在某一时间段,两个中断同时触发,程序跑飞。(两个属于不同优先级的中断,并没有嵌套从而导致混乱,系统重启)正常情况下很少会因为这样程序重启。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ln change

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值