misarc嵌入式编程标准.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MISAR C 嵌入式编程标准 及LDAR Testbed软件简单介绍 2010.04.16 一、MISAR C 嵌入式编程标准 MISAR C 概述 1994 年,在英国成立了一个叫做 汽车工业软件可靠性联合会(The Motor Industry Software Reliability Association,简称MISRA)的组织。它是致 力于协助汽车厂商开发安全可靠的软件的跨 国协会,其成员包括:AB汽车电子、罗孚汽 车、宾利 汽车、福特汽车、捷豹汽车、路虎 公司、 Lotus 公司、 MIRA公司、 Ricardo 公司、TRW汽车电子、利兹大学和福特 VISTEON汽车系统公司。 MISAR C 概述 MISRA于 1998年发布了一个针对汽 车工业软件安全性的C语言编程规范—— 《汽车专用软件的C语言编程指南》 (Guidelines for the Use of the C Language in Vehicle Based Software),共 有 127 条规则,称为MISRA C:1998。目前 MISRA C:2004 版已有 141 条规则,21 个类 别,每一条规则对应一条编程准则。通常认 为,如果能够完全遵守这些准则,则该段C代 码就是易读、可靠、可移植和易于维护的。 表1 MISRA C:2004规则分类 分类 强制 规则 推荐 规则 分类 强制 规则 推荐 规则 开发环境 4 1 表达式 9 4 语言外延 3 1 控制表达式 6 1 注释 5 1 控制流 10 0 字符集 2 0 Switch语句 5 0 标识符 4 3 函数 9 1 类型 4 1 指针与数组 5 1 常量 1 0 结构体和联合体 4 0 申明与定义 12 0 预处理命令 13 4 初始化 3 0 标准库 12 0 算术类型转换 6 0 运行失败 1 0 指针类型转换 3 2 MISAR C 部分编程规则 ? 数据类型相关规则; ? 指针结构体联合体的安全规则; ? 表达式的相关规则; ? 程序流控制的相关规则; ? 构建安全的编译环境规则。 数据类型相关规则 一、 数据类型相关的编程风格 规则 6.3(推荐):必须用 typedef显式标识出各数据 类型的长度和符号特性,避免直接使用标准数据类型。 例如:一个 32 位的整数系统,可定义如下: typedef char chat_t; typedef signed char int8_t; typedef signed short intl6_t; typedef signed int int32_t; typedef signed long int64_t; typedef unsigned chat uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned 1ong uint64_t; 数据类型相关规则 二、 数据类型转换 有时侯由于程序员的疏忽,或者是过于相 信编译器的 “智慧”程度,导致表达式中有很多隐 式转换(即没有显式地强制转换),而这些隐式数据 类型转换很可能就构成致命的漏洞。 示例1:执行以下程序,result_8 的值是多少? uint8_t port = 0x5a ; uint8_t result_8 ; result_8 = (~port) 4 ; /*注:uint8_t 表示8 位无符号整型*/ 数据类型相关规则 如果编译器为16位,~port=ffa5, 如果编译器为32位,~port=0xffffffa5。 最终结果都是result_8=0xfa. 规则 10.5:如果位操作符~和移位操作符(或)联合作 用于 unsigned char 或者unsigned short 类型的操作 数时,中间运算步骤的结果必须立刻显式强制转换为预 期的短整型数据类型。 将最后一行代码改成: result _8=((uin8_t)(~port))4 则 result_8 可取得预期的值,及result _8=0x0a. 数据类型相关规则 示例2:执行以下程序,d的值是多少? uint16_t a = 10 ; uint16_t b = 65531 ; uint32_t c = 0 ; uint32_t d ; d = a + b + c ; /*注:uintl6_t 表示16 位无符号整型,uint32_t 表示 32 位无符号整型*/ 数据类型相关规则 如果编译器为32位,最终结果为b=65541 , 如果编译器为16位,最终结果为b=5(错误)。 规则 10.1:以下情况下,整型表达式中不允许出现隐 式数据类型转换。 ①整型

您可能关注的文档

文档评论(0)

152****7770 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档