代码之家  ›  专栏  ›  技术社区  ›  Ilya

嵌入式软件的MISRA标准

  •  10
  • Ilya  · 技术社区  · 16 年前

    我有一个要求,使大量的代码misra兼容。
    第一个问题:有人能给 估计 根据经验为嵌入式系统传递编写良好的代码。我知道“写得好”的定义不明确,所以我要求原始的估计。
    第二个问题:对于可自定义(即允许禁止特定警告)并在自动构建环境(即命令行界面)中使用的工具的任何建议。
    可以帮助完成此任务的任何其他有用建议。
    谢谢你。

    6 回复  |  直到 12 年前
        1
  •  12
  •   Martin Thompson    12 年前

    我也强烈推荐PC皮棉。如果您碰巧使用Visual Studio编译代码,我建议您使用RiverBlade的“Visual Lint”插件。如果您不能在Visual Studio中编译代码,您仍然可以从命令行运行pc lint以获得良好的效果。

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

    很难想出一个经验法则来估计要使一些编写良好的代码符合misra所需的时间。很大程度上取决于程序员现有的编码习惯,以及他们一开始是如何严格遵循misra规则的。

    粗略估计:
    2-3天,熟练使用电脑皮棉。
    使现有代码符合misra标准的初始过程:最初花在编写代码上的时间的10%到25%。
    保持代码符合MISRA:代码开发增加了5%到10%。一半的成本是改变编码人员的习惯,遵循“米斯拉”的做事方式。另一半是额外的代码测试和检查成本,以确保符合MISRA。

        2
  •  8
  •   Jon Mills    16 年前

    如果您遵循相当好的编程实践,那么使代码符合misra并不太麻烦。您可能会发现一些指针规则有点棘手,如果您试图使之符合的代码有一些奇怪的和美妙的指针算法。

    我赞同格雷格对pc lint的建议,但是开源的夹板也是值得一看的,尽管在它们之间(和编译器的警告系统),我估计你仍然只能覆盖80%的misra规则-其余的可能需要手工代码审查。

        3
  •  4
  •   Greg    16 年前

    我用PC皮特对C和C++代码进行静态分析。它可以配置为显示违反了哪些misra规则,并且具有命令行界面。

        4
  •  3
  •   bsneeze    16 年前

    我使用了一个名为 QAC . 该工具能够执行 MISRA

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

    我怀疑一个初级工程师要花上一周(4-5天)的时间来安装它(假设他们决心让它按你想要的方式工作)。

    另一方面,其他商业静态分析工具也可能具有misra强制执行功能。据报道(根据他们的销售代表) Klocwork 做。

        5
  •  3
  •   Jens    12 年前

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

    我们使用支持misra c规则的green hills编译器。还有独立的跳棋。根据你想做什么,可能有点过分杀戮,打开所有的规则。我们一次打开一个规则,给人们时间来解决有限数量的类似问题,否则你会被错误的数量完全淹没。

    由于我们的警告是由编译器生成的,而不是由独立的工具生成的,因此在开发过程中,您不仅可以在运行检查器时看到错误。随着我们继续开发,我们得到了代码遵从性,而不是一次大爆炸。这还可以防止旧习惯破坏新代码,导致您以后不得不重新编写代码。

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

        6
  •  1
  •   Andrew    12 年前

    我很感激这是一个古老的问题,但为了任何其他考古学家(或搜索者)的利益,记住米斯拉提供的 指南 这不应该总是盲目的遵循。

    我建议在编写新代码时要考虑到misra,因此要保持顺从要容易得多。

    然而,这并不总是可能的——尤其是在试图对代码进行反向工程以满足指导原则时。在这种情况下,我建议您关注所需的规则,并将建议视为奖金…成本和效益也适用于这里!

    另外,要记住有一个偏差过程——与其设计一些顺从但难以辨认的意大利面,不如用偏差来保持代码的清洁和可维护性。