misra 简史
协作 misra 项目是在 1990 年代初构思的,旨在为在道路车辆电子系统中创建嵌入式软件制定指南。1994 年 11 月,发布了基于车辆的软件的开发指南。
合作继续进行,并于 1998 年 4 月出版了 misra c 的第一版。
最初,misra c 仅针对汽车行业。然而,很快就认识到它的适用性要广泛得多……这可以通过第二版的名称更改来体现。
1998 年 4 月 第1版《基于车辆的软件中使用 c 语言的指南》
2004 年 10 月 第2版c 语言在关键系统中的使用指南
第 3版 2013 年 3 月 c语言在关键系统中的使用指南
现在,在其第 3版中,misra c 已成为大多数安全相关行业中嵌入式 c 编程的事实标准,在这些行业中,安全性至关重要,并且即使在安全性或安全性不是主要的情况下,也用于提高软件质量考虑。
misra c 的背景
c 语言定义
虽然非常流行,但 c 语言有几个缺点。特别是,语言定义(iso 标准)并未完全指定语言,而是将某些方面置于编译器实现的控制之下。这是有意的,部分原因是希望支持许多针对不同目标处理器的预先存在的实现。
因此,该语言的某些领域:
行为未定义——即标准没有强加任何要求
行为是未指定的 - 即标准允许两种或多种可能性,并且在任何情况下都没有对选择的进一步要求
实现可以自由选择自己的行为,前提是已记录在案
依赖于未定义或未指定行为的程序不能保证以可预测的方式运行;同样,依赖于实现定义行为的程序可能难以移植到不同的目标。
语言滥用
虽然 c 程序可以以结构化和易于理解的方式进行布局,但 c 使程序员可以轻松编写难以理解的晦涩代码。
运算符的规范使得编译器难以检测到编程错误。例如,以下两段代码都是完全合法的,因此编译器不可能知道其中一个是否被错误地用来代替另一个:
if ( a == b ) /* 测试 a 和 b 是否相等 */
if ( a = b ) /* 将 b 赋值给 a,然后测试 a 是否非零 */
语言误解
程序员通常会误解该语言的某些领域。例如,c 比其他一些语言有更多的运算符,因此有大量不同的运算符优先级,其中一些不直观。
c 提供的类型规则也会让熟悉强类型语言的程序员感到困惑。例如,操作数可能被“提升”为更广泛的类型,这意味着操作产生的类型不一定与操作数的类型相同。
例如:
uint8_t c = 0x82;
签名 int d;
d = c 《《 1; // uint8 上的 《《 运算符返回 signed int
运行时错误检查
c 程序可以编译成小而高效的机器代码,但代价是运行时检查的程度非常有限。c 程序通常不为常见问题提供运行时检查,例如算术异常(例如被零除)、溢出、指针有效性或数组绑定错误。
c 哲学是程序员负责进行此类检查……
那么,什么是 misra c?
考虑到所有这些,misra c 指南定义了一个可预测的 c 语言子集,其中消除或减少了出错的机会。
除了定义这个子集之外,这些 misra c 指南还提供:
开发 c 程序的教育材料
工具开发人员参考资料
这些指南中的建议,当在文档化的软件开发过程中使用时,解决了 c 语言的许多缺点,而与开发代码的最终用途无关。
通过定义 c 语言的可预测子集并为开发人员提供指导,misra c 为嵌入式控制系统和独立软件的安全应用提供了最佳实践指南。
智能家居系统有没有安装的必要
线束装配如何正确的完成插接
高通试图打破英特尔主导地位,推出服务器芯片
OCP网卡携手整机柜交付成未来数据中心主流
智能水表模块化结构设计及原理
MISRA C可用于提高软件质量考虑
利用单宁酸与铁离子的配位作用制备了功能化四氧化三铁磁性纳米颗粒
受疫情影响 SpaceX SAOCOM 1B卫星发射计划遭无限期推迟
光电信息技术简介
飞机上公网:研究两年认定技术成熟
御芯微惊艳亮相IOTE 2023第二十届国际物联网展·深圳站
制冷机的工作原理
海南航空新华社民族品牌工程号飞机已成功完成首航飞行
UPS电源系统的防雷措施
阿里云发布国内首个大数据双活容灾服务
为什么555电路电压控制端5脚与地之间要接一个电容?
DRG与DIP二者关系的三种可能性简述及在医疗中的应用分析
骁龙888性能如何 骁龙888和骁龙865差距有多大
沉浸式技术加速转型来源,分析2021年值得关注的十大VR/AR趋势
互动场景下的低延迟编码技术