在实际的项目过程中,我发现电路和代码可以在很短的时间内完成,大部分的时间都花在了排查故障上,搞了好几天也找不到故障原因的情况很常见。
因此掌握必要的调试技巧是非常必要的,根据我的工作经验,我总结了七条调试规则。
1. 联系FAE
FAE 是 Field Application Engineer 的缩写,又称现场技术支持工程师、售前售后服务工程师。是芯片或模块厂商为了方便开发者使用产品而设置的岗位。他们长年处理客户反馈的问题。如果能联系到他们,对开发者定位问题会很有帮助。
比如我曾经用过合泰的一款单片机,在更新程序的时候发现有时候可以正常烧录程序,有时候却烧录不进去,排除了软件版本问题、焊接问题、接触不良问题等,但是问题依旧。
后来我联系了和泰的FAE,把实际情况告诉他,不到两分钟他就帮我找到原因,原来是下载用的杜邦线太长了,如果没有他的帮助,我要花更长的时间才能解决这个问题,甚至根本解决不了。
二、熟悉调试工具
如果熟悉了调试工具,对定位问题会很有帮助,相反,如果不熟悉工具,不仅工具不能发挥应有的作用,甚至可能引发新的问题。
比如我曾经调试过一个串口通信功能,我通过电脑上的串口助手软件给单片机发送数据,调试了好久,单片机还是不能正确的处理我发送的数据。
找了好久才发现串口助手软件里有一个选项——“发送新行”,勾选这个选项后,发送的数据末尾会加上“0x0d”和“0x0a”,所以实际发送的数据并不是我设置的数据,单片机当然没法正确处理。
因此你必须对常用工具非常熟悉。
第三,找人讨论
即使别人不能帮助解决问题,和别人商量一下也是很有价值的。
例如,我曾经调试过一款单片机的I2C通信,由于对单片机和I2C协议不熟悉,调试了很久都无法实现正常的数据通信,心里越来越焦急和担心,始终找不到故障原因。
我和同事讨论了一下,他当时也没搞清楚问题所在,但是他建议用串口通信代替I2C,后来顺利完成了任务,节省了时间。
当你遇到问题时,尤其是在时间紧迫的情况下,打破常规可能会让人感到压力很大。如果你能与他人讨论,即使无法解决问题,你也会有不同的看法。
四、检查焊接
正常的硬件是产品正常工作的前提,从正规渠道购买的器件、芯片在出厂前都经过了测试,一般不会出现问题。如果设计时也采用了厂家推荐的设计方案,那么硬件故障就很有可能发生在焊接上。
这就需要保证电路板表面的清洁,焊点处没有凸起物等,可以用万用表检查焊接是否正常,用洗板水清洁电路板表面。
5. 逐一击败他们
我在接项目的时候发现很多客户都喜欢把功能做的很全面,比如我最近接的一个电炉项目,客户在电炉上添加了蓝牙音箱、手机充电、手机APP控制等功能。
当功能越来越多的时候,整个设备就会变得臃肿,定位问题会变得更加困难,这就需要将产品划分成小部分,每个部分尽量独立,接口清晰。
当整个系统出现问题时,先定位是哪个小部分出现了问题,然后再解决这个部分的问题。这样就把大问题分解成小问题,更利于解决。
6.了解基本原理
为了顺利解决产品故障,必须了解各部件的基本工作原理,否则,即使通过更换或反复尝试解决问题,也只是暂时的解决办法,问题可能再次发生。
比如我在调试某单片机的ADC功能时,发现输出的数据和理论值不一致,因为我知道ADC的原理,所以第一时间想到是参考电压的问题。
设备那么多,手册那么厚,不可能看完所有资料,学完所有知识,如何才能抓住重点,快速理解基本原理?
我的经验是,至少要了解一些器件的常用技术参数的含义,比如运算放大器的共模抑制比,三极管的集电极电流,电源的开关频率等等。
7.阅读手册
很多人遇到技术问题时喜欢用搜索引擎寻找答案,但搜索结果质量参差不齐,有的甚至是错误的。
比如我曾经用过一个Atmega单片机,在烧写过程中出现问题,通过百度查了很多资料,但很多都很笼统,比如检查接线,检查电源是否正常等等。
后来我看了AVR ISP编程器的技术手册,里面介绍了各个指示灯的具体功能,闪烁次数代表什么,各个错误可能出现的原因等,非常权威详细,让我很快定位到了问题,比用搜索引擎快多了。
结论
总之,调试能力是一名工程师必备的基本功,只有总结调试经验,不断提升解决问题的能力,才能在职业发展的道路上走得越来越远。
欢迎各位朋友投稿,请联系客服yingshi_mm
用户评论
我也有七年经验了,看这篇文章感觉确实很有道理!调试有时候就是一团乱麻,这些规则很实用,我要试着把它们都记下来,看看能不能提高效率。
有11位网友表示赞同!
写得真好啊!我刚入行两年,很多时候调Bug都还是靠瞎摸的感觉,看了这篇博客突然觉得自己还有很长路要走。
有7位网友表示赞同!
这七条规则听上去不错,不过实践中还要根据具体情况进行调整吧?毕竟每个项目的环境和问题都不一样。
有7位网友表示赞同!
七年工作经验啊,我估计我这三年还追不上人家一个月的调试速度呢!???? 这篇文章让我又看到了程序调试的深度。
有17位网友表示赞同!
其实我觉得最重要的是心态,遇到调试问题要冷静思考,不要被它搞得灰心丧气。仔细分析问题,按照一步步的逻辑推理,就能找到解决方法
有7位网友表示赞同!
杜邦线是个好工具,但我也觉得有时候没必要为了使用杜邦线而刻意去调试,如果直接在代码层面去修改更简单。这七条规则中有些地方我觉得可以做更详细的解释。
有18位网友表示赞同!
我个人比较喜欢从全局观入手,先分析整个功能模块的工作流程,再逐步定位问题所在。有时候局部调试反而容易误入歧途。
有19位网友表示赞同!
这个分享很有用!调试确实是一项技能需要不断练习和积累经验才能提高。我会把这七条规则作为参考,尝试应用到我未来的工作中
有13位网友表示赞同!
我觉得调试比学习新技术的更重要,因为只有能找到问题并解决它,才能真正掌握代码的精髓。
有20位网友表示赞同!
七年经验还是很有说服力的,这些规则看起来确实很能提高效率。我试着把它们应用在我的工作中,观察一下效果再说。
有12位网友表示赞同!
其实调试除了工具和技术,更需要良好的沟通技巧,与团队成员充分交流问题和解决方案,才能更高效地解决问题
有8位网友表示赞同!
调试过程中遇到瓶颈也很常见,比如找不到bug的根源。这时候要保持耐心和冷静,多尝试不同的方法和思路,不要轻易放弃。
有20位网友表示赞同!
我觉得这七条规则适合有一定基础经验的程序员,对于新手来说,可能需要更具体的指导和案例来理解这些规则
有17位网友表示赞同!
杜邦线确实是个好辅助工具,但不能过度依赖它。我们要学会独立思考,找到问题的本质原因,而不是只依赖工具快速修复问题
有12位网友表示赞同!
调试是一项长期投资,不断的积累经验和知识才能让自己成为一个优秀的程序员。这篇博客让我看到了一些新的思路,很有启发!
有8位网友表示赞同!
我更喜欢使用代码逻辑分析的方法进行调试,因为这样可以更加深入地理解代码的功能和执行流程。杜邦线只是辅助工具,不能代替准确的代码分析
有18位网友表示赞同!
这七条规则的确很专业,让我受益匪浅。我会把它们作为我的调试指南,并在实际工作中不断实践和总结
有11位网友表示赞同!