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。