1、应对复位
单片机可能在运行过程中复位了,下面介绍几种类型,用来分析自己的单片机可能的复位类型,从而定位问题根源:
序号 分类 原因
1 看门狗 软件死机,无法喂狗,导致复位。
可能没有打印错误码,跟 硬复位 效果相同
2 内存泄露 内存泄露导致复位(有些单片机会打印 error码,比如bk3432:0xf2f2f2f2)
3 指针使用出错 -
4 数组越界 -
5 硬复位 上电复位 / 欠压复位 / RST引脚复位,寄存器会重置
6 软件复位 软件主动复位,可能是OTA完成等情况。(寄存器不会重置)
2、应对 程序死机/跑飞/死循环
序号 分类 原因
1 外设未初始化 硬件IIC、串口,在上电/休眠唤醒后,未执行初始化,但是又去 发送/读取 等操作,导致死机。
1、增加 软件看门狗 ,当程序死机无法喂狗,看门狗会让单片机复位。
2、如果程序死机时,软件看门狗也失效,那么就需要 增加 硬件看门狗芯片。
3、关键代码保护
程序中通过硬件SPI或者IIC跟外设通信,如果确认时序没有问题(正常情况可以读取数据或者发送数据),但是有时候在通信过程中,被其他中断抢占,造成SPI 时序延迟 导致出错。
解决方法:1、在SPI 通信开始前,关闭总中断;2、在SPI通信结束之后,再 打开总中断。
从而保护 关键代码运行不被干扰。类似于 通过 进入临界区 / 退出临界区(enter_critical() / exit_critical())的方式保护关键代码不受干扰。
4、蓝牙连接广播 造成异常
蓝牙连接广播较小(<200ms),造成偶现 屏幕显示异常、I2C通信异常等情况,可以把连接广播间隔设置成1.5s~2s。
|