关于嵌入式:MISRA-C个人使用程序编码指南?

MISRA-C coding guidelines for personal use programs?

我通常是木材工人,而不是开发商。我正在学习C/C++用于嵌入式系统,同时试图使我的一些工具自主来节省我几个小时的重复工作。

现在,它很有趣而且进展顺利,我已经花了大概一百个小时的编码/学习时间,并且已经节省了更多的时间*。

因为我想继续下去,是购买和遵循misra编码规则的"强制性好主意"?米斯拉包含什么?只有编码规则,或是一些使其更安全的提示?

这些工具可能是危险的(毕竟它们会切割木头,人体的抵抗力要低得多…)。

注:我的测试显然分四步进行:

  • 只是一张使用OSD&SD卡记录器运行的图片(有一天我会制作一个anylze工具并停止阅读这些工具)。

  • 我把工具插上,上面什么都没有

  • 我在泡沫上使用软钻/刀具。

  • 我用手按紧急停止按钮,在很远的地方进行真正的测试。

  • 另外,我是唯一的员工,没有其他人可以进入我的工作场所。

    *现在我已经把一个钻孔机变成了一个3D的木头打印机(做不精确的部分工作),一个"刀板"变成了一个自动化的。

    注2:我不是本地人,因此工具的名称可能已关闭。


    Misra最初是为汽车工业设计的,尽管它已经远远超过了这个阶段。米斯拉·吉德林所说的目标是:

    • 确保安全
    • 为软件带来健壮性、可靠性。
    • 当与财产安全发生冲突时,必须优先考虑人身安全。
    • 在系统设计中考虑随机故障和系统故障。
    • 证明其稳健性,而不仅仅依赖于无故障。
    • 在产品的设计、制造、操作、维修和处置过程中应用安全注意事项。

    这些文档主要由基于规则的代码咨询信息组成,这些代码试图满足这些目标。这些年来,misra文件价格有所下降,一些文件可以从misra在线购买,只需10英镑+增值税。

    然而,作为初学者和业余程序员,我建议首先加强你对C和C++的知识。虽然在大多数行业领域,遵循相关标准通常是很好的,但如果适用的话,编写文档的前提是读者在语言方面有着非常坚实的基础,并且在使用这些语言编写的全面商业类型应用程序的关注点和过程中也有着坚实的基础。如果您的工作坊仅供个人使用,并且取决于您管辖范围内的工作场所安全规则,我可以说,对语言、语言工具和硬件有一个很好的理解,可以让您在如何编写代码方面做出好的选择,而不是在这样的阶段阅读Misra。

    正如上面所评论的,值得重申的是,misra并不是某种魔法棒或具体的方式,它可以保证你的代码是好的、有效的和安全的。好代码和坏代码都可以满足标准。在完全理解你所做的事情之前,遵循米斯拉的做法可能与确保你的车间里的每根电缆都整齐地钉在适当的位置上,然后用凿子刺伤你自己一样。


    misra-c是一套规则,它将强制您从C程序中排除众所周知的问题和定义不好的行为。它是C语言的一个"安全子集",通过规则禁止各种形式的危险实践,这些规则旨在解决众所周知的错误,例如依赖定义不好的行为或隐式类型转换。C语言是一种非常古老的语言,这意味着所有的语言缺陷都是众所周知的。

    MISRA-C非常注重静态代码分析,以便在编译时发现错误。这是需要牢记的一点,据我所知,没有开源静态代码分析器工具可以检查MISRA-C的遵从性。商业工具往往非常昂贵,而且常常充满错误/误报。尽管如此,它们中的大多数还是有用的。

    MISRA-C只专注于C编程,它不解决CPU或微控制器等问题,尽管它确实实施了某种形式的防御编程,这是一种对抗EMI、逃逸代码和其他形式的意外程序行为的计数器。(有关C之外的一般提示和技巧的列表,请参阅此。但并非所有这些都必须适用于您的特定机器。)

    为了演示misra遵从性,您创建了一个"遵从性矩阵",它显示了如何捕获misra-c文档的每个指令/规则:通过编译器消息、同行评审、静态代码分析等。

    文档中的大多数规则都很有意义,但有些规则没有意义。但是,MISRA-C允许偏离大多数规则,将其列为:

    • 强制性的。不允许偏差。
    • 推荐。如果不遵守规则,必须调用正式的偏差过程。
    • 咨询的。一个人可以不做正式的偏离就偏离规则。

    因此,创建MISRA-C合规性通常是通过建立公司编码标准来完成的,该标准涉及所有规则。实现它的最简单方法是在本文档中记录公司级别上遵循的规则和跳过的规则。然后相应地设置静态代码分析过滤器。