2022年学习MISRAC之一“安全第一”的C语言编程规范参照 .pdf
《2022年学习MISRAC之一“安全第一”的C语言编程规范参照 .pdf》由会员分享,可在线阅读,更多相关《2022年学习MISRAC之一“安全第一”的C语言编程规范参照 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编者按 : C 语言是开发嵌入式应用的主要工具,然而C 语言并非是专门为嵌入式系统设计,相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。1998 年,MISRA 指出,一些在 C 看来可以接受, 却存在安全隐患的地方有127 处之多。 2004 年,MISRA 对 C 的限制增加到141 条。嵌入式系统应用工程师借用计算机专家创建的C 语言,使嵌入式系统应用得以飞速发展,而 MISRAC 是嵌入式系统应用工程师对C 语言嵌入式应用做出的贡献。如今MISRA C 已经被越来越多的企业接受,成为用于嵌入式系统的C 语言标准, 特别是对安全性要求极高的嵌入式系统,软件应符合MISRA
2、标准。从本期开始,本刊将分6 期,与读者共同学习MISRAC。第一讲: “,安全第一 ? 的 C 语言编程规范 ” ,简述 MISRAC 的概况。第二讲: “ 跨越数据类型的重重陷阱” ,介绍规范的数据定义和操作方式,重点在隐式数据类型转换中的问题。第三讲: “ 指针、结构体、联合体的安全规范” ,解析如何安全而高效地应用指针、结构体和联合体。第四讲: “ 防范表达式的失控” ,剖析 MISRAC 中关于表达式、函数声明和定义等的不良使用习惯,最大限度地减小各类潜在错误。第五讲:“ 准确的程序流控制” , 表述 C 语言中控制表达式和程序流控制的规范做法。第六讲: “ 构建安全的编译环境” ,
3、讲解与编译器相关的规范编写方式,避免来自编译器的隐患。C/C+ 语言无疑是当今嵌入式开发中最为常见的语言。早期的嵌入式程序大都是用汇编语言开发的,但人们很快就意识到汇编语言所带来的问题 难移植、难复用、难维护和可读性极差。很多程序会因为当初开发人员的离开而必须重新编写,许多程序员甚至连他们自己几个月前写成的代码都看不懂。C/C+ + 语言恰恰可以解决这些问题。作为一种相对 “ 低级” 的高级语言, C/C+ 语言能够让嵌入式程序员更自由地控制底层硬件,同时享受高级语言带来的便利。对于 C语言和 C+ 语言,很多的程序员会选择C语言,而避开庞大复杂的C+ 语言。这是很容易理解的C 语言写成的代码
4、量比C+语言的更小些,执行效率也更高。对于程序员来说,能工作的代码并不等于“ 好” 的代码。 “ 好” 代码的指标很多,包括易读、易维护、易移植和可靠等。其中,可靠性对嵌入式系统非常重要,尤其是在那名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 些对安全性要求很高的系统中,如飞行器、汽车和工业控制中。这些系统的特点是:只要工作稍有偏差,就有可能造成重大损失或者人员伤亡。一个不容易出错的系统,除了要有很好的硬件设计(如电磁兼容性)
5、,还要有很健壮或者说“ 安全 ” 的程序。然而,很少有程序员知道什么样的程序是安全的程序。很多程序只是表面上可以干活,还存在着大量的隐患。当然,这其中也有C 语言自身的原因。因为C 语言是一门难以掌握的语言, 其灵活的编程方式和语法规则对于一个新手来说很可能会成为机关重重的陷阱。 同时, C 语言的定义还并不完全,即使是国际通用的C语言标准, 也还存在着很多未完全定义的地方。要求所有的嵌入式程序员都成为C 语言专家, 避开所有可能带来危险的编程方式,是不现实的。最好的方法是有一个针对安全性的C 语言编程规范,告诉程序员该如何做。1 MISRAC 规范1994 年,在英国成立了一个叫做汽车工业软
6、件可靠性联合会(The Motor Industry Software Reliability Association,以下简称MISRA)的组织。它是致力于协助汽车厂商开发安全可靠的软件的跨国协会,其成员包括:AB汽车电子、罗孚汽车、宾利汽车、福特汽车、捷豹汽车、路虎公司、Lotus 公司、MIRA 公司、 Ricardo 公司、 TRW 汽车电子、利兹大学和福特VISTEON 汽车系统公司。经过了四年的研究和准备,MISRA 于 1998 年发布了一个针对汽车工业软件安全性的 C 语言编程规范 汽车专用软件的C 语言编程指南(Guidelines for the Use of the C
7、Language in Vehicle Based Software),共有 127 条规则,称为MISRAC:1998 。C 语言并不乏国际标准。国际标准化组织(International Organization of Standardization, 简称 ISO)的 “ 标准 C 语言 ” 经历了从 C90、C96 到 C99 的变动。但是,嵌入式程序员很难将ISO 标准当作编写安全代码的规范。一是因为标准C 语言并不是针对代码安全的, 也并不是专门为嵌入式应用设计的;二是因为 “ 标准 C 语言 ” 太庞大了,很难操作。 MISRAC: 1998 规范的产生恰恰弥补了这方面的空白。随
8、着很多汽车厂商开始接受MISRAC 编程规范, MISRAC:1998 也成为汽车工业中最为著名的有关安全性的C语言规范。 2004 年,MISRA 出版了该规范的新版本MISRAC:2004 。在新版本中, 还将面向的对象由汽车工业扩大到所有的高安全性要名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 求( Critical)系统。在 MISRAC:2004 中,共有强制规则121 条,推荐规则20 条,并删除了 15 条旧规则
9、。任何符合MISRAC:2004 编程规范的代码都应该严格的遵循 121条强制规则的要求,并应该在条件允许的情况下尽可能符合20 条推荐规则。MISRAC:2004 将其 141 条规则分为21 个类别, 每一条规则对应一条编程准则。详细情况如表1 所列。表 1 MISRAC:2004 规则分类最初, MISRAC:1998 编程规范的建立是为了增强汽车工业软件的安全性。可能造成汽车事故的原因有很多,如图1 所示,设计和制造时埋下的隐患约占总数的15% ,其中也包括软件的设计和制造。MISRAC:1998 就是为了减小这部分隐患而制定的。MISRAC 编程规范的推出迎合了很多汽车厂商的需要,因
10、为一旦厂商在程序设计上出现了问题, 用来补救的费用将相当可观。1999 年 7 月 22 日,通用汽车公司 (General Motors )就曾经因为其软件设计上的一个问题,被迫召回 350 万辆已经出厂的汽车,损失之大可想而知。MISRAC 规范不仅在汽车工业开始普及,也同时影响到了嵌入式开发的其他方向。嵌入式实时操作系统C/OSII的 2.52 版本虽然已经于2000 年通过了美国航空管理局(FAA)的安全认证, 但 2003 年作者就根据MISRAC:1998 规范又对源码做了相应的修改,如将if (pevent-OSEventTbly &= bitx) = 0) /* */ 名师资料
11、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 的写法,改写成pevent-OSEventTbly &= bitx; if (pevent-OSEventTbly = 0) /* */ 发布了 2.62 的新版本,并宣称其源代码99符合 MISRAC:1998 规范。一个程序能够符合MISRAC 编程规范, 不仅需要程序员按照规范编程,编译器也需要对所编译的代码进行规则检查。现在,很多编译器开发商都对MISRAC 规范有了支持,比如 I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年学习MISRAC之一“安全第一”的C语言编程规范参照 2022 学习 MISRAC 之一 安全第一 语言 编程 规范 参照
限制150内