MISRA - C是什么?

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

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

大多数工程组织最初MISRA - C和c++的标准适用于他们的手写的C和c++代码。MISRA标准已经被精炼,以适应使用MATLAB等代码生成工具®和仿真软万博1manbetx件®

为什么MISRA - C对嵌入式系统是重要的?

C编程语言是最流行的语言之一,对嵌入式系统因其固有的功能,例如性能、可移植性在硬件和内存直接控制。但是,某些C语言结构会导致程序错误,未定义行为,或实现定义的行为。

MISRA - C准则定义一个C语言的“安全子集”来防止语言方面可以妥协的安全嵌入式系统。

例如,C99允许使用初始化器列表只能在运行时计算的表达式。然而,列表的元素的顺序评估没有定义。这个简单的例子中:

1 int x = 0;2 int y = 1;3不稳定的int v;4 5 void函数(){6 arr int [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 - C的进化

MISRA - C的第一版出版于1998年。MISRA已经发表的两个版本,MISRA - C: 2004和MISRA - C: 2012年,和两个修正案MISRA - C: 2012。与每个出版物,MISRA增加了新的指导方针和方向提供了更多关于如何实现MISRA C合规。

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”安全规则。
  • MISRA - C: 2012 -附录3地图MISRA - C: 2012CERT C规则。

为了解决日益增长的使用建模和自动代码生成工具,如万博1manbetx,Stateflow®,嵌入式编码器®,MISRA MISRA AC AGC在2007年11月出版。这个文档包含指南如何应用MISRA-C: 2004条规则代码生成工具。本指南最近被纳入MISRA - C: 2012。

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

MISRA - C: 2012指南被编写为规则或指示。一个指导方针是贴上:

  • 规则如果提供的信息可用于明确合规检查源代码。规则是进一步分为可决定的,如果它可以确切验证使用静态代码分析等工具Polyspace®。例如,MISRA - C: 2012规则11.1(“转换之间不得执行一个函数指针和其他类型”)是一个可决定的规则。
  • 指令如果提供的信息是开放的解释或与软件开发过程有关。例如,MISRA - C: 2012 1.1 Dir(“任何实现定义的行为程序的输出赖以应当记录和理解”)是一个指令。

每个指南也贴上咨询、要求或强制。确保遵守MISRA - C: 2012项目源代码必须满足:

  • 所有强制性的准则
  • 所有必需的指导方针,除非受到正式的偏差
  • 咨询指导,实际

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

一些重要的注意事项是什么MISRA - C: 2012领养?

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

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

生成合规矩阵

每个项目应该创建一个文档的合规矩阵所有的指导方针和相应的实施方法。需要手动审查指南不能完全执行静态代码分析器等使用工具。

文档的偏差

MISRA允许偏离准则在这些指导方针可能是不切实际或不合理的情况下。所有这些偏差必须记录和授权。文档应该包括该方针的指引下,情况下,偏差的理由和风险分析。

使用生成的代码

代码生成简化了MISRA - C合规流程。自动代码生成器指南列表将不会违反了所生成的代码。生成的代码MISRA-compliant,工程师必须使用适当的建模模式和代码生成选项。MISRA - C: 2012提供指导的规则并不适用于生成的代码。例如,规则,注重可读性不太重要,因为生成的代码是由人类不应该被修改。

使用手写代码

MISRA - C规则可以手动检查,但看着成百上千,有时数百万行代码违反规则是不实际的。因此,MISRA - C推荐使用静态代码分析工具来确保遵从性。MISRA - C也建议软件开发人员检查合规只要编写代码之前,代码评审或单元测试。解决违规在开发生命周期的早期是便宜得多,比延迟直到后期更有效。

关键MathWorks产品开s manbetx 845发MISRA - C兼容的应用程序

万博1manbetxStateflow仿真软件,仿真软件检查™,嵌入式软件和嵌入式编码被广泛用于生成符合MISRA - C和MISRA-C + +。工程师可以实现遵守MISRA - C: 2012和MISRA c++建模指南,指导方针,坚持目标代码生成和代码生成顾问检查。

协助用户在他们的努力进一步实现MISRA - C合规MathWorks维护一个可行性分析方案和建议MISRA生成C代码在使用嵌入式编码模型和Stateflow模型。万博1manbetxMISRA - C分析包包括:

  • 与规则的总结文档和详细的例子
  • 万博1manbetx仿真软件模型

Polyspace®代码验证产品是用于分析手写或为MISs manbetx 845RA - C合规所生成的代码。Polyspace错误发现者™万博1manbetxMISRA-C支持编码规则的检测:2004年,MISRA - C: 2012年,MISRA AC AGC和MISRA-C + +: 2008年,AUTOSAR c++ 14。这个工具可以用来检查生成的代码和代码获得独立消息来源的证实,确实符合MISRA c .工程师Polyspace结果也可以追溯到模型和模型层次上的注释来证明偏差。

7让嵌入式软件安全的方法