发布信息

普通嵌入式软件的调试经验及一些有用的工具

作者:软荐小编      2024-02-10 15:08:50     212

大家好,我是乔德先生。

这次我将分享一些调试嵌入式软件的经验和一些有用的工具。

需要说明的是,这不是一篇大师教你如何成为大师的文章,因为我还不是大师; 是一个普通嵌入式软件工程师从无经验到有一点经验的调试总结,非常基础。

我们常说软件要分三部分写,七部分协调写。 在实际开发中,确实是这样的。 我工作了好几年了,对此的体会也越来越深。 每当需求出现时,我可以很快地写出代码,但是调试需要花费大量时间。

这里需要明确的是,调试的目的不仅仅是为了调整整个功能需求。 调整功能是最基本的需求,还需要优化、逻辑完善、异常处理等。 所以,这需要很长时间。

我记得我毕业时参与的第一个项目。 该项目的硬件架构比普通产品更加复杂:

我负责的部分是D芯片的软件。 D芯片的作用与产品功能比较相似。 当时数据通过A发送,经过B、C,再到D,产品功能无法正常运行。 我当时的第一反应是我负责的D芯片逻辑可能有问题。

A、B、C均由经验相对丰富的工程师负责,C负责人为组长级别。 大家也觉得应该是我负责的D芯片的代码有问题,因为我是一个刚毕业的新人。 我觉得问题很大可能出在我身上。

他们没有检查这是否是他们的问题。 他们只是每天来看我是否发现问题。 我花了几天时间才终于找到它。 C芯片发给我的数据有问题~

由于当时缺乏调试经验,无法快速定位问题。 如果现在做的话,这种问题很快就能被发现。 因为现在我积累了一些经验:

嵌入式软件课程_嵌入式系统软件教程_嵌入式软件怎么学

调试经验

在正常的开发和调试过程中,可能会出现两种情况:

1. 自主开发

嵌入式系统软件教程_嵌入式软件课程_嵌入式软件怎么学

对于一些小项目,如果整个项目都是我们自己开发的话,调试起来会更容易。 因为是我们自己开发的,所以我们会比较熟悉。

我的习惯是模块化开发。 每个模块开发完成后,我首先想办法测试该模块。 如果没有问题的话,就集成到项目中去。 在模块的初始开发和测试期间,代码可以是任意的。 调整后,可以重新组织代码并集成到项目中。

自测方法:有些代码直接对应功能,可以直接测试看功能是否正常; 可以通过日志打印一些代码,看看是否正常; 有的可能需要在线调试看看是否符合预期; 有些需要数据输入。 是的,你可以自己模拟一些数据等等。

2. 协同开发

嵌入式软件怎么学_嵌入式系统软件教程_嵌入式软件课程

协同开发可能会比较麻烦。 特别是有时甚至需要跨部门调试。

我的习惯是:先开发并自测自己的模块; 然后模拟对方,简单自测一​​下通讯情况。

自测自己的模块的方式和上面独立开发一样。 当我们模拟对方进行测试时,我们需要考虑是否会花费更多的时间。 如果太花时间,算了,等到联调吧。

如果花的时间少,可以自测通讯。 可能有三种情况:

当然,协作开发不需要沟通自测,要看个人习惯。

我模拟了自测通信,以便对自己模块的通信有一定程度的控制。 当联调出现问题时,我可以很快指出对方的问题。 当然,这并不是为了推卸责任,而是为了更好地分析和解决联调问题。

例如,在我最近的项目中,设备连接到了手机APP。 APP局域网内的网络分配功能和设备通讯功能。 我负责设备端,充当服务端; 另一方充当客户。

在和对方联合调试之前,我已经写了一个客户端运行在PC或者设备上,模拟对方的手机APP,对我的模块进行了基本的自测,也测试了我的模块的一些问题。

那么在和对方正式联调的过程中,出现的问题大部分都是在对方这边,所以这个时候我就可以帮助对方分析问题,提高联调的效率。

上面我分享了一些我的经验和想法。 我们来看看一些具体的调试方法和工具:

调试方法1.LOG

在我的实际工作中,日志打印和调试已经解决了我的大部分问题。 对于一般问题,可以通过分析日志来定位问题。 不过,日志记录也需要很多关注,我们需要打印出有助于我们调试的信息。

例如:

带有时间戳、函数名、行号等可以帮助分析问题的信息。 例如:

[func:100]

当然,实际情况中,可能不仅仅包含上述信息,还可以根据需要进行添加。

这样,你就可以清楚地知道程序到达分支判断时的执行流程。

手术从哪里开始一目了然。

例如,在统一的日志格式中添加特定的标签,例如“BUSINESS”。 喜欢:

[BUSINESS][func:100]

因为业务逻辑一般是整个项目的最顶层,其他模块为它服务。

当我们查看日志时,可以在编辑器中搜索关键字“BUSINESS”,只列出与业务逻辑相关的日志。 我们只要看这些日志嵌入式系统软件教程,就可以大致知道程序的运行过程。

当然,也可以根据需要标记其他模块。

处理数据的模块可能需要打印一些数据来分析源数据是否正常。 您可以稍微控制打印频率,在不影响数据分析的情况下打印尽可能少的日志。

否则,某些日志文件很容易达到数百MB,使分析变得令人头疼。 特别是当需要将日志保存在flash上​​时,为了防止日志填满flash,往往需要限制日志文件的大小并进行滚动日志覆盖。 此时嵌入式系统软件教程,如果无效日志过多,则可能会覆盖有效日志。

之前有关日志调试的文章:

C语言和嵌入式中的几种非常实用的宏技术

无法修复bug?使用log方法

2、在线调试

在线调试可以让您看到程序运行的更多细节。 你应该了解基础知识。

GDB此前相关推文:

GDB调试器原来这么简单

一步一步教你如何使用VSCode + gdb + gdbserver调试ARM程序原创

3.其他调试工具

之前我们也分享过很多有用的调试相关工具:

(1)虚拟LCD

这是一个实用的液晶模拟器。 如果你手头没有LCD或者处于开发初期,需要经常下载程序来验证效果,可以使用VirtLCD来提高我们的开发调试效率。

VirtLCD介绍及简单使用:

手头没有 LCD,但急于开发 UI? 了解 LCD 模拟器

(2)Wireshark

Wireshark是一款网络数据包分析软件。 例如,当我们在调试socket通信时,可以使用Wireshark监控来查看自己是否发送了数据,或者是否收到了对方发送的数据。

wireshark介绍及简单使用:

详解wireshark抓包工具的使用

(3)VSPD

Virtual Serial Port Driver (VSPD) 是一个虚拟串口软件。 虚拟串口软件是模拟物理串口的软件。 它完全复制了硬件COM接口的功能,并且将被操作系统和串行应用程序识别为真正的端口。

编写串口上位机时,需要进行调试。 一种方式是与下位机通讯进行测试; 另一种方法是使用虚拟串口软件进行测试。

VSPD介绍及简单使用:

相关内容 查看全部