近来接触的一些朋友搞开发过程中遇到各种各样的问题,有些是比较基础的,有些是比较棘手的,各种问题都有,这里不针对具体问题进行分析,主要是发现他们在解决思路和解决方法上还存在问题,这里想谈谈自己的一些心得见解,希望对大家有用。
硬件方面自己也是菜鸟,懂得也不多,这里主要说说软件调试方面的方法。一般软件开发都会涉及到多个模块,很多朋友都是把硬件模块全都串起来后,再通过编写软件看硬件工作正不正常,比如通过看灯闪不闪,声音有没有输出来判断程序是否正常,这种方法能判断程序运行正不正常,但是却无法判断问题出在哪。神秘代码(437577621)
这里建议可编程模块最好先独立编程开发,用可视化手段去判断程序是否工作正常,而不是通过外部硬件设备如LED灯之类的来检查程序是否正常工作。比如两个单片机A跟B进行通信,A向B发送数据,B根据A的数据来控制一个LED三色灯显示,A跟B之间采用串口的方式进行数据通信,这时很多朋友可能是先将A、B、LED三个部件先串起来,然后往A跟B刷写程序,然后上电,看LED灯是否正常来判断AB程序是否正常,那么问题来了,如果显示的是预期结果,那么没什么问题,如果显示的不是预期结果,比如颜色不对或者压根就不显示,或者常亮不变色,这时怎么来判断程序哪里出错呢?造成这种的原因很多,硬件接线短路,程序代码错误都有可能出现运行不如预期,这时就不太好排查错误了,所有还是建议将模块分开单独编程调试,确保软件不存在问题,再来排查硬件问题,这样就简单多了,所以上面那个问题我们可以这样来调试。
首先先测试A往B发的数据正不正确,将A的串口连接电脑,将程序刷写到A,看电脑串口能不能接收到A发送过来的数据,然后测试B接受数据处理的正不正常,将B的串口连接电脑,用电脑模拟模块A往B发送数据,B根据接收到的数据进行处理,这里我们可以在程序里的控制部分添加输出代码进行调试,比如收到数据r显示红色,收到数据y显示黄色,这里可以改为收到数据r在串口显示1,收到数据y在串口显示数据2,这样就可以在串口判断程序是否工作正常了,两边模块的代码都确保正常运行后就可以将各模块部件连接起来进行统一调试。
排除了软件问题后,硬件问题就简单很多了,可以从接线、电源等方面入手。还有一个问题就是编码的问题,特别是不同从厂商之间生产的模块之间的通信,或者通过不同协议进行网络通信的情况,之前做过一个用PC通过wifi连接采用udp协议控制esp8266的模块,一开始发现正确的数据传输过去,esp8266模块怎么也没法正确运行,最后发现是数据编码的问题,esp8266使用的编码是gb2312,而pc端发送过去的编码是utf8,造成数据没法识别。所以这里也提出来希望能引起大家的注意。