第31章:故障排查与优化
遇到 Bug 不要慌,遵循“现象 -> 假设 -> 验证”的科学排查流程。
31.1 网络故障
现象:设备频繁掉线。
- 排查思路:
- 信号强度:检查 RSSI,是否因为距离路由器太远或有墙壁阻隔?
- DHCP 租期:路由器的 DHCP 租期到了,IP 续租失败?
- 路由器负载:家用路由器带机量通常不超过 30 台,连接过多会导致随机踢人。
- 云端限流:检查云平台日志,是否因为发包频率太快被 Throttling(限流)?
31.2 数据异常
现象:温度传感器显示 -999 或 0。
- 排查思路:
- 硬件连接:I2C/UART 线松动?虚焊?
- 时序问题:上电初始化时,传感器还没准备好就去读?(加
delay)。 - 数据溢出:变量类型选错了?(用
int8存了 200)。
31.3 功耗异常
现象:电池本来能用一年,结果一周就没电了。
- 排查思路:
- 休眠失败:代码逻辑有 Bug,导致无法进入深度睡眠。
- 外设漏电:主控睡了,但传感器、LDO 或上拉电阻还在耗电。
- 唤醒频繁:中断引脚被干扰信号误触发,导致频繁唤醒。
31.4 系统死机
现象:设备运行几天后突然没反应,重启后正常。
- 排查思路:
- **内存泄漏 (Memory Leak)**:
malloc后忘了free。随着时间推移,堆内存耗尽。 - 指针越界:操作了非法内存区域。
- 电源波动:电机启动瞬间拉低电压,导致 MCU 复位。
- 对策:开启硬件看门狗 (WDT),死机后自动重启。
- **内存泄漏 (Memory Leak)**:
排查完故障,我们往往还需要对系统进行调优。下一章我们将探讨性能调优。