MISRA C是什么?

安全、安全、可靠的嵌入式软件编码标准

MISRA C和MISRA c++标准是一套C和c++编程语言的编码指南,促进嵌入式系统软件的安全性、安全性和可靠性。这些指导方针是由汽车工业软件可靠性协会(MISRA)发布的,该协会是汽车制造商、零部件供应商和工程咨询公司之间的合作组织。MISRA C指南,最初只针对汽车工业,现在广泛接受和应用于其他行业,如航空航天和国防,工业自动化和医疗设备。

大多数工程组织最初将MISRA C和c++标准应用到他们手写的C和c++代码中。MISRA标准已经被改进,以适应从工具(如MATLAB)生成的代码的使用®和仿真软金宝app件®

为什么MISRA C对嵌入式系统很重要?

C编程语言是嵌入式系统中最流行的语言之一,因为它具有内在的能力,比如性能、跨硬件的可移植性和对内存的直接控制。然而,某些C语言结构可能导致编程错误、未定义的行为或实现定义的行为。

MISRA C指南定义了C语言的一个“安全子集”,以防止语言方面可能危及嵌入式系统的安全性。

例如,C99允许使用只能在运行时计算的表达式的初始化式列表。但是,没有定义列表元素的求值顺序。举个简单的例子:

1 int x = 0;2 int y = 1;3 volatile int v;4 5 void func() {6 int arr[2] = {x+y, x-y};7 int arr2[2] = {x++, x+y};8 int arr3[2] = {v, v};9}

在第7行和第8行,列表中的一个元素修改另一个元素中使用的变量的值。求值顺序的模糊性可能导致意外值。例如,arr2[]可以用\(\{1,1\}\)或\(\{1,2\}\)初始化,这取决于x++的求值顺序。因此,MISRA C:2012规则13.1规定,在初始化列表中出现的表达式不能修改这些表达式中使用的变量。

MISRA的演变

MISRA C的第一版出版于1998年。MISRA已经出版了另外两个版本,MISRA C:2004和MISRA C:2012,以及MISRA C:2012的两个修订版。在每一份出版物中,MISRA都增加了新的指导方针,并提供了关于如何实现MISRA C遵从性的更多方向。

MISRA C:2012也有以下补充:

  • MISRA C:2012 -附录1显示了MISRA C:2004和MISRA C:2012之间的双向规则映射。
  • MISRA C:2012 -附录2将MISRA C:2012映射到ISO/IEC TS 17961:2013“C Secure”规则。
  • MISRA C:2012 -附录3地图MISRA C:2012到CERT C规则。

以解决建模和自动代码生成工具使用的增长,例如金宝appStateflow®,嵌入式编码器®, MISRA于2007年11月发布了MISRA AC AGC。本文档包含关于如何在代码生成工具中应用MISRA-C:2004规则的指导。该指南最近被纳入MISRA C:2012。

我如何确保符合MISRA C:2012?

MISRA C:2012指南被写成规则或指令。指南被标记为:

  • 规则是否可以利用所提供的信息明确地检查源代码的遵从性。如果某一规则具有结论性,则进一步将其归类为可确定的验证使用静态代码分析等工具Polyspace®.例如,MISRA C:2012规则11.1(“不得在指向函数的指针和任何其他类型之间执行转换”)是一个可确定的规则。
  • 指令所提供的信息是否可以解释或与软件开发过程有关。例如,MISRA C:2012 Dir 1.1(“程序输出所依赖的任何实现定义的行为都应该被记录下来并被理解”)是一个指令。

每个指导方针也被标记为建议、必需或强制。为确保符合MISRA C:2012,项目源代码必须满足:

  • 所有强制性的准则
  • 所有要求的指导方针,除非有正式的偏差
  • 切实可行的谘询指引

MISRA通过出版物提供了额外的合规指导,如MISRA合规:2016和MISRA合规:2020。

采用MISRA C:2012有哪些重要考虑?

在软件开发过程中集成MISRA C

MISRA建议将MISRA C准则集成到项目的软件开发过程中。MISRA C没有定义软件开发过程,但建议使用可以在功能安全标准中找到的过程,如ISO 26262, DO 178C, IEC 62304和IEC 61508。

生成合规矩阵

每个项目都应该创建一个法规遵循矩阵,记录所有的指导方针和相应的实施方法。对于不能完全使用诸如静态代码分析器之类的工具来执行的指导方针,需要进行手工审查。

文档的偏差

MISRA允许在那些指导方针可能不切实际或不合理遵循的情况下偏离指导方针。所有此类偏差必须记录在案并得到批准。文件应包括指导方针、情况、偏离的理由和风险分析。

使用生成的代码

代码生成简化了MISRA C遵从过程。自动代码生成器列出生成的代码不会违反的准则。要生成符合misra的代码,工程师必须使用适当的建模模式和代码生成选项。MISRA C:2012提供了关于哪些规则对生成代码不太适用的指导。例如,关注可读性的规则就不那么重要了,因为生成的代码不需要人工修改。

使用手写代码

可以手动检查MISRA C规则,但是查看几十万行,有时甚至是数百万行代码来检查是否违反规则是不现实的。因此,MISRA C推荐使用静态代码分析确保遵从性的工具。MISRA C还建议软件开发人员在代码编写完成后立即检查是否符合要求在代码检查或单元测试之前。在开发生命周期的早期解决违规问题比延迟到后期阶段要便宜得多,效率也高得多。

MathWorks用于开发M下载188bet金宝搏ISRA C兼容应用程序的关键产品

金宝appSimulink, statflow, Simulink Check™和Embedded Coder被广泛用于生成符合MISRA C和MISRA c++的嵌入式软件。通过遵循建模指导方针、代码生成目标和代码生成顾问检查,工程师可以实现对MISRA C:2012和MISRA c++指导方针的遵从。

为了帮助用户进一步实现MISRA C遵从性,MathWorks维护了一个可行性分析包和建议,用于在使用带有Simulink和statflow模型的Embedded Coder时生成MISRA C代码。金宝appMISRA C分析包包括:

  • 包含规则摘要和详细示例的文档
  • 金宝app仿真软件模型

Polyspace®代码验证产品用于分析手写的或生成的代下载188bet金宝搏码以符合MISRA C。Polyspace错误发现者™金宝app支持MISRA-C:2004, MISRA C:2012, MISRA AC AGC, MISRA- c++:2008, AUTOSAR c++ 14中的编码规则检测。这个工具可以用来检查生成的代码,并获得代码确实符合MISRA c的独立确认。工程师还可以追溯Polyspace结果到模型,并在模型级别进行注释,以证明偏差。

7种方法使嵌入式软件安全和安全