娱乐领域之外的汽车软件设计比大多数系统设计都要困难。可靠性和安全性通常比特性或最大性能更重要。总的来说,硬件和软件的设计往往是非常保守的。
C编程语言对于车辆平台非常流行。不幸的是,在C中创建错误是众所周知的。悬挂指针,缓冲溢出,甚至丢失的加号也可以造成严重破坏,即使是最好的系统设计也是如此。通过限制程序员可以使用的特征来减少这种错误的一种方法是减少C的功率。
电机in-dustry软件可靠性关联(Misra)采用其C指南采用此方法。Misra“基于车辆软件的发展指南”文件包含与C的ISO / ANSI标准编程语言有关的127条规则,以及理由和示例。许多流行的嵌入式C和C ++编译器供应商实施这些规则,因此程序员可以将滥用标记为警告或错误。
尽管被称为MISRA C的目的是开发嵌入式汽车系统,但它同样适用于几乎任何嵌入式应用环境。许多MISRA C规则限制了C语言特性的使用,比如指针。指针经常用于提高效率,即使在数组索引等替代方法可以提供相同效果的情况下也是如此。
在过去,使用指针的代码效率明显高于数组,并且提供了更高的性能。许多当前的编译器在内部将这样的数组操作转换为指针操作,本质上是将基于数组的源代码转换为与指针版本一样高效的目标代码。这样做的好处是,面向指针的编译器生成的代码是以一种可控的方式创建的。
MISRA C的规则分为17个部分,包括声明和定义、控制流、指针和数组、结构和联合以及标准库。规则又分为必需规则和咨询规则。大多数C编译器实现了MISRA C的限制,这样开发者就可以使用完整的标准或者它的一个子集。在将应用程序迁移到MISRA C时,有选择地使用MISRA C非常方便。
有些人可能会认为对程序员的限制会导致叛变,但大多数开发人员擅长使用C将非正式地实施许多屠杀规则。表中显示的规则34只是一个示例。嵌入式作业是另一个。有超过120项规则,程序员将被难以置信,不要找到他们更喜欢的一些。大多数是常见意义改进,在理解规则及其含义之后将吸引程序员。
MISRA C不是一个标准,但更多的是一个建议。规则是用简单的英语编写的,尽管有些规则是模糊的,并且存在一些冗余。由于没有标准的测试套件,因此MISRA C编译器或遵从性测试工具可以为相同的源代码生成不同的错误或警告消息。
不出所料,MISRA C在汽车领域非常受欢迎。MISRA C也在大多数嵌入式领域找到了追随者,这仅仅是因为建议是如此完整。任何通过附加规则的改进都是微不足道的。
即使在使用MISRA C时,编程经验仍然很重要。尽管它不能完全消除错误,但MISRA C将有助于减少应用程序中的错误数量。
www.misra.org.uk
isra c示例 |
•规则34(必需) •逻辑&&或||的操作数应该是主要表达 无效的 if(x = = 0 && Ishigh) 有效的 If ((x == 0) && ishigh) 主表达式是常量、单个标识符(如ishigh)或圆括号表达式。括号对于可读性和确保行为符合程序员的意图非常重要。 |