前面讲了如何定位嵌入式系统的硬件问题,本次我聊一下,使用什么技巧来定位碰到的软件问题。
软件问题,具有一定复杂性,表现也千奇百怪,很难一概而论有哪些具体的分类。
因此,我以调试手段,来切入讨论怎么解决软件问题。
硬件仿真调试工具对于嵌入式平台,最好的调试手段,是在线仿真器。
“在线”即连接到目标板,“仿真器”是最早的仿真硬件的延续叫法,现在多是调试器,不仅可以配MCU来完成运行、停止、断点、烧写,还能完成变量读写、寄存器访问等功能。
因为调试工具的强大功能,所以我们通常强烈建议使用调试工具,这样可以高效率地排查问题。
最重要的是,实时参与,效率很高。
ARM芯片常用的调试器串口打印消息如果没有仿真器,那该如何定位问题呢。
可供后备选择的是串口,即UART。
通过串口,我们可以将感兴趣的数据,从串口打印出来,然后在PC机上使用软件接收数据,来分析是否正确。
例如,程序进了哪个函数、哪个分支、参数是什么值等,都可以从串口发送出去。
这样就可以间接替代仿真器,实现内部关键信息的掌握。
需要注意的是,打印的数据最好和代码模块及位置可以一一对应,方便准确提供定位问题的信息。
利用串口打印变量和分支信息屏幕、按键、LED等对于极简的单片机系统,如何调试软件呢?那我们只能就地取材,系统有什么资源,那就用什么。
比如,我们可以先调通硬件的屏幕或LED显示。
然后,可以在屏幕上显示感兴趣的信息,或者用LED的闪烁与组合,来表示不同的含义。
利用按键来模拟断点,触发停止或运行。
这种方法,是不得已而为之,效率较低,是没有其他手段的最后选择。
总结尽管软件问题各式各样,但大部分的错误,都发生在逻辑判断、数值计算这两个方面。
我们可以利用有效的资源,尽量掌握程序实际执行到的分支,来推断逻辑和计算是否有问题。
各种手段基本都是围绕这个目的来开展问题定位。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)