Misra标准的嵌入式软件

时间:2008-09-15 13:39:28

标签: c code-analysis embedded misra

我要求制作大量符合MISRA标准的代码 第一个问题:有人可以根据经验为嵌入式系统传递编写好的代码提供估算。据我所知,“写得好”的定义不明确,含糊不清,所以我要求进行原始估算 第二个问题:任何可以定制的工具建议(即允许禁止特定警告)并在自动构建环境中使用(即命令行界面)
任何其他有用的建议,可以帮助完成这项任务 谢谢伊利亚。

6 个答案:

答案 0 :(得分:12)

我也强烈推荐PC-Lint。如果您正在使用Visual Studio编译代码,我建议使用Riverblade中的插件“Visual Lint”。如果无法在Visual Studio中编译代码,仍可以从命令行运行PC-Lint,效果良好。

某些嵌入式系统编译器提供MISRA一致性测试作为编译器警告。我使用IAR编译器进行Arm7 / Arm9开发。它在编译器设置中提供了易于配置的MISRA合规性检查表。

很难想出一个经验法则来估计制作符合MISRA标准的代码所需的时间。很大程度上取决于程序员现有的编码习惯以及他们首先遵循MISRA规则的程度。

粗略估计:
2 - 3天熟练使用PC-Lint。
使现有代码符合MISRA标准的初步通过:首先编写代码所花费的时间的10%到25% 保持代码MISRA兼容:代码开发增加了5%到10%。这笔费用的一半改变了你的程序员遵循“MISRA方式”做事的习惯。另一半是代码测试和检查的额外成本,以确保MISRA合规。

答案 1 :(得分:8)

如果您遵循相当好的编程习惯,那么使代码符合Misra并不是太多的苦差事。你可能会发现一些指针规则有点棘手,如果你试图遵守的代码有一些奇怪而精彩的指针算法。

我是第二个Greg对PC Lint的建议,但开源Splint也值得关注,虽然它们之间(和编译器的警告系统),我估计你仍然只能覆盖80%的Misra规则 - 其余的可能需要手工审查代码。

答案 2 :(得分:4)

我使用PC Lint进行C和C ++代码的静态分析。它可以配置为显示违反MISRA规则的内容,并且具有命令行界面。

答案 3 :(得分:3)

我使用了名为QAC的商业工具。该工具可以强制执行MISRA

它有一个命令行界面,因此您可以将其设置为从自动构建环境运行。要应用的规则是可配置的,但希望有人花一些时间来设置它。 MISRA执法非常简单,运作良好。我被告知(这只是第三手),这是一些代理商(如FDA)用来评估代码的工具之一。像大多数静态分析工具一样,有噪声(误报)需要处理。我最后一次使用它时,它没有很好的方法来标记/阻止误报再次发生(不改变它所抱怨的代码)。

我怀疑一名初级工程师需要一周时间(4-5天)才能完成设置(假设他们决定让它按照您的意愿运行)。

另外,其他商业静态分析工具也可能会执行MISRA。据报道(根据他们的销售代表),Klocwork确实如此。

答案 4 :(得分:3)

我们遇到了类似的改造Misra规则的问题。我们在一个大型项目中遇到了一些代码质量问题,并决定使用MISRA来提高代码质量。

我们使用支持MISRA C规则的Green Hills编译器。还有独立的跳棋可用。根据你想要做的事情,它可以在所有规则上切换。我们一次切换一条规则,让人们有时间修复有限数量的类似问题,否则你会被错误的数量所淹没。

由于我们的警告是由编译器生成的,而不是由独立工具生成的,因此您在开发时会看到错误,而不仅仅是在运行检查程序时。随着我们不断发展,我们的代码符合标准而不是大爆炸。这也可以防止旧习惯破坏新代码,导致您不得不在以后重新编写代码。

有些时候很难让旧代码兼容,因为没有人确切知道代码是如何工作的。我希望你有单元测试。

答案 5 :(得分:1)

我很欣赏这是一个古老的问题,但为了任何其他考古学家(或搜索者)的利益,重要的是要记住MISRA提供的指南并不总是盲目跟随。< / p>

我赞扬用MISRA编写新代码;因此,保持合规将会容易得多。

然而,这并非总是可行 - 尤其是在尝试对代码进行逆向工程以满足指南时。在这种情况下,我建议您关注所需规则,并将Advisories视为奖励......此处也适用成本效益!

另外,请记住,有一个偏离过程 - 最好保持干净和可维护的代码有偏差,而不是设计一些兼容但难以辨认的意大利面条。