嵌入式系统开发的六种调试技术

学习和传播各种调试技术可以减少bug数量,提高代码质量。这里有六种技术可以帮助调试过程。重新设定软件编码期望,为嵌入式系统开发获得更好的结果。

通过David LaVine,观点系统公司 2015年4月2日

可靠的设计实践(例如低耦合、定义良好的接口)将有助于减少错误数量。在此之后,系统必须进行调试,或者根据态度进行调试。我们往往会对bug的存在感到恼怒甚至惊讶。事情并不一定要这样。这只是解决问题的另一个方面。使用正确的工具和技术,并重新设定我们的期望,调试过程实际上可以很有趣。

学习和传播各种调试技术可以减少开发过程中的bug数量,并提高代码质量。试着让更有经验的工程师开设一个关于技术的短期课程,让年轻的工程师从中学习。

虽然不是一个详尽的列表,但这六种技术可以很好地帮助调试过程:

1.简化复杂数据:用数字的、合成的、已知的、可重复的数据代替复杂的模拟输入。如果一开始使用计数模式,那就使用计数模式。对于带有系数的算法(如滤波器),用一组更简单的系数(如除一个满量程系数外的所有零)替换产生系数。参见图1。

2.分而治之:在试图理解问题之前,尽可能多地关注问题的位置。从长远来看,这可以在模拟和硬件实验室中节省大量时间。为了详细说明,假设你有一组处理密集型信号处理算法;我们称它们为A、B、C、D。当你刺激A并观察D时,你会注意到一个问题。如果您可以缩小到C的输入看起来很好,但C的输出很糟糕,那么您已经锁定了错误,问题很可能是在C内部。现在您可以去掉处理A、B和D的额外复杂性。

这个概念也适用于自下而上的观点。验证较低级别的函数首先工作,然后向上通过抽象层。例如,也许您有一个模拟数据记录器算法。首先验证低级A/D接口、物理内存接口和物理通信总线接口。然后向上移动一层以验证数据处理程序和路由器等功能。最后,验证数据记录器的顶层。

3.放慢进程:放慢时钟和数据速率。也许某些时间要求没有得到满足。也许一个算法与另一个算法没有同步。也许某个需要数据驱动的算法被意外地编码为时钟驱动。或者可能是一台设备试图将数据太快地推送给另一台设备。

4.每次只改变一个变量:当有多个输入时,隔离它们并且一次只更改一个输入,观察系统响应是很有价值的。这里的技巧是识别所有导致系统输出变化的输入。这与故障隔离和激活有关。

5.创建离线模型:为了进行位级比较,这些模型应该尽可能地与实时算法匹配。这对于非直观的转换(如矩阵运算)最有用,因为很难理解相对于输入的输出应该是什么样子。如果实时算法是定点算法,离线算法是浮点算法,可能会有小的差异累积而导致问题。

6.从已知好的状态开始:慢慢地调整输入,直到出现问题,bug就可以被观察到。这对于可能发生溢出的场景很有帮助。例如,如果怀疑比特缠绕,在输入处慢慢增加振幅,直到观察到问题。类似地,如果使用了缓冲区,首先向算法输入少量数据,然后慢慢增加,直到出现可疑的情况。另一种情况是,一个控制回路在大的瞬态中断时,在稳态条件附近出现较小的偏差时,可能会表现良好。

在独自观察问题一段时间后,另一双眼睛当然也会有所帮助,所以不要害怕让外人偷看。

- David LaVine是一名业务开发工程师角度系统,具有系统工程、电气工程和数字工程领域的知识和经验。由数字项目经理Joy Chang编辑,控制工程jchang@cfemedia.com

关键概念:

  • 学习和传播各种调试技术是至关重要的。
  • 试着让更有经验的工程师创建一个关于技术的短期课程,让年轻的工程师从中学习。
  • 使用正确的工具和技术,以及重新设定期望,调试过程会很有趣。

考虑一下这个

你们的标准调试过程是什么?您是否拥有解决问题的正确工具和技术?

注册本文的来源,视点系统,以获得更多的信息嵌入式机器控制状态监测