嵌入式调试里最容易被忽略的几件小事
从串口、供电、日志和复现路径说起,记录一些嵌入式开发里看似基础但很重要的调试习惯。
嵌入式开发有一个很真实的特点:问题经常不是出现在你以为最复杂的地方,而是出现在某个很基础、很容易被略过的环节。
有时候代码看起来没问题,现象就是不对。这个时候如果只盯着逻辑,很容易越调越乱。
先确认供电和连接
很多问题第一步就应该回到物理层。
板子有没有正常供电?电压稳不稳定?GND 有没有共地?线有没有接反?接口有没有松?这些问题听起来很低级,但它们真的会浪费很多时间。
我现在越来越觉得,调试时先把“硬件是否可信”确认一遍,是一种节省时间的习惯。
串口不是只用来看输出
串口调试很常见,但如果只是随便 printf,信息很快就会变成噪声。
更好的方式是让串口输出有层次:
- 启动时打印版本、模式和关键配置。
- 关键状态变化时打印状态名。
- 异常时打印错误码或上下文。
- 数据量大时控制频率,不要把通信本身拖慢。
日志不是越多越好,而是要让人能顺着它找到问题发生的位置。
保留复现路径
调试时最怕的是“刚才坏过,但现在不知道怎么坏的”。
所以遇到问题时,我会尽量记录几个东西:
- 当前接线方式。
- 当前固件版本。
- 操作步骤。
- 预期现象和实际现象。
- 改动了什么之后现象发生变化。
这些记录不一定要很正式,但至少要能让自己回头看懂。
不要急着同时改很多地方
嵌入式问题经常牵涉硬件、驱动、通信协议和应用逻辑。如果一次改太多地方,即使问题消失了,也很难知道真正起作用的是哪一处。
更稳的做法是一次只改一个变量,然后观察现象。
这听起来慢,但比反复猜快得多。
调试也是工程能力
很多时候,调试能力不是记住多少寄存器,也不是会不会某个工具,而是能不能把混乱现象拆成几个可验证的问题。
先确认电,再确认线,再确认协议,再确认代码。
一步一步来,问题通常就不会那么吓人。