对于嵌入式系统来说,软件细节很多,任何语句都可能引入问题,所以软件问题定位的技巧就显得尤为重要。前面讲了如何定位嵌入式系统的硬件问题。这一次,我来说说用什么技巧来定位遇到的软件问题。
软件问题具有一定的复杂性,表现形式多种多样,具体分类很难一概而论。因此,我讨论如何通过调试来解决软件问题。
硬件调试工具
对于嵌入式平台,最好的调试手段,是在线仿真器。“在线”即连接到目标板,“仿真器”是最早的仿真硬件的延续叫法,现在多是调试器,不仅可以配MCU来完成运行、停止、断点、烧写,还能完成变量读写、寄存器访问等功能。因为调试工具的强大功能,所以我们通常强烈建议使用调试工具,这样可以高效率地排查问题。最重要的是,实时参与,效率很高。
对于嵌入式平台,最好的调试方法是在线模拟器。“在线”是指连接到目标板。“模拟器”是最早的模拟硬件的延续名称。现在多是调试器,不仅可以搭载MCU完成运行、停止、断点、烧写,还可以完成变量读写、寄存器访问等功能。由于调试工具的强大功能,我们通常强烈建议使用调试工具,它可以高效地解决问题。最重要的是,实时参与,效率很高。
ARM芯片中常用的调试器
串行端口打印消息
如果没有仿真器,那该如何定位问题呢。可供后备选择的是串口,即UART。通过串口,我们可以将感兴趣的数据,从串口打印出来,然后在PC机上使用软件接收数据,来分析是否正确。例如,程序进了哪个函数、哪个分支、参数是什么值等,都可以从串口发送出去。这样就可以间接替代仿真器,实现内部关键信息的掌握。需要注意的是,打印的数据最好和代码模块及位置可以一一对应,方便准确提供定位问题的信息。
如果没有模拟器,如何定位问题?备份选项是串口,即UART。通过串口,我们可以从串口打印出感兴趣的数据,然后在PC机上用软件接收数据,分析是否正确。比如程序输入的哪个函数,哪个分支,参数的什么值可以从串口发出来。这样就可以间接替代模拟器,实现内部关键信息的掌握。需要注意的是,打印的数据要与代码模块和位置一一对应,方便准确的提供定位问题的信息。
利用串口打印变量和分支信息
屏幕、按键、发光二极管等。
极简单片机系统如何调试软件?那就只能就地取材,系统有什么资源就用什么资源。比如我们可以先调整硬件屏幕或者LED显示屏。然后,有趣的信息可以显示在屏幕上,或者通过发光二极管的闪烁和组合来表达不同的含义。使用按键模拟断点并触发停止或运行。这种方法是不得已而为之,效率低,是没有其他手段的最后选择。
摘要
虽然软件问题种类繁多,但错误大多发生在逻辑判断和数值计算。我们可以利用有效的资源,尽量抓住程序实际执行的分支,从而推断出逻辑和计算是否有问题。各种手段基本都围绕这个目的来进行问题定位。
本文来自吃鸡只用平底锅投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/633337.html