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

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行,列表的元素修改了在另一个元素中使用的变量的值。评估顺序中的歧义可能会导致意外值。例如,可以用\(\ {1,1 \} \)或\(\ {1,2 \} \)初始化ARR2 [],具体取决于评估X ++的顺序。因此,Misra C:2012规则13.1说明在初始化程序列表中发生的表达式无法修改这些表达式中使用的变量。

屠杀的演变

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指南被写成规则或指令。指南被标记为:

  • 规则如果提供的信息可以利用毫不含糊地检查源代码是否合规。如果可以得出结论,则规则进一步归类为可判定验证使用A.静态代码分析工具如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建议臭臭的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和StateFlow模型使用嵌入式编码器时生成MISRA C代码的建议。金宝appMisra C分析包包括:

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

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

7种方式,使嵌入式软件安全安全安全