你的位置:大电流电感 > 先锋技术

查找嵌入式C语言程序/软件中的缺陷的多种技术

2020-09-03 13:11:41      点击:
上一篇:用于自动或半自动机器人的RIO嵌入式控制平台

我们尚不明确系统不能正常工作的原因,因此我们设法对系统进行调试,但是在目标板上进行调试是一件耗时而且烦人的事。因为我们不得不手动分析调试器的结果并试图人工判断出问题的真正原因。或者我们使用一些被证实能自动定位出错误的工具或技术来帮助我们减轻负担。

从这一点而言,我们要么期待使用调试器来调试程序能够带来好运,要么我们尝试使用一种自动化的测试策略来查找代码中所存在的错误。如果自动化技术仍然没有帮助我们查找到错误,那么我们不得不回到使用调试器作为最后的办法。

基于模式的静贴片功率电感态代码分析

这里,我们假设仅在绝对必要的情况下才使用调试器进行调试,因此我们从运行基于模式的静态代码分析开始。它将查找到如下图所示的问题:

这是违反了 MISRA 的一个规则,此违规说明该处的赋值运算符存在一些可疑情况。的确,编程者此处的本意是使用比较运算符而不是赋值运算符。因此我们将此处检测到的冲突修改掉,并重新运行程序。

我们发现有了一些改善:一些输出被显示在了LCD屏上了。但是,由于一次访问违规,程序崩溃掉了。因此我们需要再次地做出选择。我们是应该使用调试器还是继续使用自动化的错误检测技术。由于经验告诉我们自动化错误检测技术能非常高效地检查出我们当前程序所遇到的内存崩溃这类问题,因此我们决定使用运行时内存监测来查找问题。

整个程序的运行时内存监测

为了进行运行时内存监测,我们使用 C++test 来插装应用程序。这样的插装是轻量级的,所以经过插装后的程序适合在目标板上运行。当我们把程序上载到目标板上并运行经过插装的程序后,我们将结果下载到PC上,如下的错误将被报告出来: