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

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 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增加了新的准则,并提供了更多关于如何实现MASRA C合规的方向。

MISRA C:2012还提供以下补充:

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

解决越来越多的建模和自动代码生成工具,如万博1manbetx州流程®,嵌入式编码器®Misra于2007年11月发布Misra AC AGC。本文件载有关于如何在代码生成工具中应用Misra-C:2004规则的指导。最近将此指导纳入MISRA C:2012。

如何确保遵守MISRA C:2012年?

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

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

每个指南也标有咨询,必需或强制性。为确保遵守MISRA C:2012,项目源代码必须满足:

  • 所有强制性的准则
  • 所有要求的指导方针,除非有正式的偏差
  • 实用的咨询指南

米苏通过诸如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产品,s manbetx 845用于开发Misra C兼容应用

万博1manbetxSimulink,StateFlow,Simulink Check™和嵌入式编码器被广泛用于生成符合Misra C和Misra-C ++的嵌入式软件。通过遵守建模指南,代码生成目标和代码生成顾问检查,工程师可以实现符合Misra C:2012和Misra C ++指南。

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

  • 与规则摘要和详细示例的文档
  • 万博1manbetx仿真软件模型

波尔盖斯®代码验证产品用于分析手写的或生成的代s manbetx 845码以符合MISRA C。Polyspace Bug Finder™万博1manbetx支持MISRA-C:2004, MISRA C:2012, MISRA AC AGC, MISRA- c++:2008, AUTOSAR c++ 14中的编码规则检测。这个工具可以用来检查生成的代码,并获得代码确实符合MISRA c的独立确认。工程师还可以追溯Polyspace结果到模型,并在模型级别进行注释,以证明偏差。

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