MISRA C

MISRA C是由汽车产业软件可靠性协会(MISRA)提出的C语言开发标准。其目的是在增进嵌入式系统的安全性及可移植性。针对C++语言也有对应的标准MISRA C++

MISRA C一开始主要是针对汽车产业[1] ,不过其他产业也逐渐开始使用MISRA C:包括航空、电信、国防、医疗设备、铁路等领域中都已有厂商使用MISRA C。[2][3]

MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》在1998年发行,一般称为MISRA-C:1998.[4]。MISRA-C:1998有127项规则,规则从1号编号到127号,其中有93项是强制要求,其余的34项是推荐使用的规则。

在2004年时发行了第二版的MISRA C的第一版《Guidelines for the use of the C language in critical systems》(或称作MISRA-C:2004),其中有许多重要建议事项的变更,其规则也重新编号。MISRA-C:2004有141项规则,其中121项是强制要求,其余的20项是推荐使用的规则。规则分为21类,从「开发环境」到「运行期错误」[5]

规则举例

MISRA C的一些规则是针对运算符的限制,例如MISRA-C:2004的规则12.10为「不要使用逗号运算符」,也可以用其他方式达到一样的效果。

动态分配内存功能是C语言的一大特色,可以在运行期依实际需求用malloc分配内存,在不使用此内存时再用free归还,但许多问题也和未正确处理动态分配内存功能有关,例如MISRA-C:2004的规则20.4为「不能使用动态堆的内存分配」,限制malloc、free等进程的使用。

工具

有许多任务具声称可以检查代码和MISRA规则兼容性,不过MISRA没有相关认证的进程[6]。相关工具可以帮助用户评估和比较检查的结果,也会提供一些可符合MISRA-C规定的指南。

大部份的规定可以用支持静态代码分析的工具检查,有些规定需要用支持动态代码分析的工具检查。

以下是一些可以配合MISRA C规则进行检查的工具:
以下是一些可以配合MISRA C规则进行检查的编译器:

相关条目

参考数据

  1. . 电子工程专辑. 2006-04-28 [2012-04-24]. (原始内容存档于2013-10-04) (中文).
  2. . [2012-04-24]. (原始内容存档于2012-02-12).
  3. . [2012-04-24]. (原始内容存档于2012-03-17).
  4. . [2012-04-24]. (原始内容存档于2017-06-07).
  5. [http://eetimes.com/discussion/beginner-s-corner/4023981/Introduction-to-MISRA-C 页面存档备份,存于 Introduction-to-MISRA-C
  6. . [2012-04-24]. (原始内容存档于2017-07-06).
  7. . [2012-04-24]. (原始内容存档于2019-10-18).
  8. . [2012-04-24]. (原始内容存档于2014-10-04).
  9. . [2012-04-24]. (原始内容存档于2012-08-20).
  10. . [2012-04-24]. (原始内容存档于2012-09-04).
  11. . [2012-04-24]. (原始内容存档于2013-10-22).
  12. . [2012-04-24]. (原始内容存档于2020-09-29).
  13. . [2012-04-24]. (原始内容存档于2016-04-15).
  14. . [2012-04-24]. (原始内容存档于2018-11-11).
  15. . [2012-04-24]. (原始内容存档于2012-04-27).

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.