MISRA C:2012 又是什么标准?
关注+星标公众号,不错过精彩内容
编排 | strongerHuang
微信公众号 | 嵌入式专栏
C语言的标准有很多,之前给大家分享过相关的内容,比如:C89、C99标准,ANSI C、ISO C、Standard C标准等。
可能你在一些地方还看到过:MISRA C:2012,MISRA C++:2008,那你知道这是什么吗?
今天分享的就是另外一种C语言标准:MISRA C.
嵌入式专栏
1
MISRA C
MISRA C是由汽车产业软件可靠性协会(MISRA)提出的C语言开发标准。
其目的是在增进嵌入式系统的安全性及可移植性,针对C++语言也有对应的标准MISRA C++。
MISRA C一开始主要是针对汽车产业,不过其他产业也逐渐开始使用MISRA C:包括航天、电信、国防、医疗设备、铁路等领域中都已有厂商使用MISRA C。
MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》是在1998年发行,一般称为MISRA-C:1998.。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类,从“开发环境”到“运行期错误”。
2012年发布第三版,为当前最新有效的C语言规范版本,称为MISRA C:2012。
MISRA版本 |
发布年份 |
C语言版本 |
指令 数量 |
规则 数量 |
指南 总数 |
1998 |
1998 |
C90 |
不详 |
127 |
不详 |
2004 |
2004 |
C90 |
不详 |
142 |
不详 |
2012 |
2012 |
C99 |
16 |
143 |
159 |
2012 AMD-1 |
2016 |
C99 |
17 |
156 |
173 |
2012 AMD-2 |
2020 |
C11 |
17 |
158 |
175 |
嵌入式专栏
2
MISRA C:2012(修订版2)
当前最新有效的C语言规范版本为MISRA C:2012,下面来讲讲其修订版2。
MISRA C工作组发布了对MISRA C:2012的修订版,以支持称为“C11”的C标准,并正式批准为ISO/IEC 9899:2011。C11已得到广泛使用,对于一直推迟迁移到C11的项目和组织,这是一个广受欢迎的公告。C11还取代了C99(标准ISO/IEC 9899:1999),并已被C18(标准ISO/IEC 9899:2018)取代。除了更新的C语言准则之外,MISRA C工作组还发布了MISRA 2020合规性指南。
MISRA C:2012(修订版2)现在引用ISO/IEC 9899:2011,并包含C语言更新,为可能使用但受限制的功能和受禁止的功能提供指导,除非其存在您的团队软件审查过程已批准的偏差。在制定修订版2的过程中,还获得了利用先前的补充内容纠正任何已知问题的机会。MISRA工作组的任务不止是提供指导,以防止发生不可预测的行为,减少或消除编码缺陷并在嵌入式软件系统的环境中促进代码安全、安全性、可移植性和可靠性。
新的MISRA C:2012标准:
添加了适用于C11中新功能的新MISRA规则的一个示例,即规则1.4,“不得使用紧急语言功能。” 如果使用设施<threads.h>和_Thread_local存储类说明符,则可能是这种情况的一个实例。该规则将使用违反类别类型“必需”标记C11语言结构。
C11标准化了可能在多核平台上运行的多线程程序的语义,以及使用原子变量的轻量级线程间通信。使用线程本地的全局内存,其中已标识出未定义和未指定行为的实例,包括未满足预期的已定义行为。
向前迈进并符合MISRA C:2012(修订版2),如果我使用_Thread_local,不仅需要进行偏离,而且还需要采取保证措施来解决危害安全性的行为。
_Generic关键字是另一个不应使用的C11语言新功能,它可能表现出不良行为,并且一些人发现C11标准在某些情况下含糊不清。_Generic运算符是一种宏重载。它用于帮助程序员将任何宏都用作通用宏,以使其更高效。下面的代码行显示_Generic关键字如何用于声明不同类型的数据类型的任何宏,以及如何将其声明为不同方法的泛型。以下面的VOL宏示例为例;VOL(x)根据x的类型转换为VOLc(x),VOLl(x),VOL(x)或VOLf(x)。
#define VOL(x) _Generic((x), char: VOLc, long double: VOLl, default: VOL, float: VOLf)(x)
安全编码
安全漏洞的一个常见原因是使用了<stdlib.h>中定义的标准库函数系统。MISRA C:2012(修订版2)添加了新的规则21.21,该规则规定不得使用标准库函数系统。系统调用是一个阻塞函数,用于执行子进程和命令,等待子进程终止并返回其退出值。认识到原型为“int系统(const char *command);”不需要是单个命令,而可以是一个管道或一系列管道。(例如,系统("pngtopnm \"My Picture.png\" | pnmtoxwd > fout.xwd && xwud fout.xwd");)由于可变命令是由用户提供的数据构成的,因此攻击者可能会发现 引用并在父级上下文中执行任意命令。一些建议的措施可能是利用预定的命令字符串或一起绕开系统调用,而使用spawn代替。
合规报告
对于声称符合MISRA的要求,有一些书面指南,这些指南在过去的几年中不断完善和修订。本文档的最新版本是MISRA Compliance 2020,它于2月发布。从较高的角度来看,适当报告了使用良好的软件开发过程的使用情况,准确地应用了哪些指南以及执行方法的有效性的列表,包括偏差的程度或程度,以及为了声称MISRA符合要求,必须考虑到项目外开发的所有软件组件的状态。Parasoft DTP提供了专用的报告扩展,完全符合MISRA Compliance标准的要求。DTP将指导您完成构建准则执行计划(GEP)和准则重新分类计划(GRP)的过程,并自动生成准则合规摘要(GCS)以及已批准偏差的完整列表。自动化报告消除了繁琐的手工工作,使组织能够遵循MISRA编码准则现在强制执行的合规性流程。
最后
还有其他新的MISRA C:2012(修订版2)规则,例如_Noreturn函数说明符、_Atomic类型说明符、_Alignas对齐说明符和_Alignof运算符,非常引人注目。使用这些类型说明符将触发类别“必需的违规”,并且将不被使用,从而解决了C11覆盖和安全漏洞的问题。此外,还进行了许多修订版2更新和文本替换,以澄清和改进标准。同样,再次提醒您非常重要的一点是,与该标准一起,用户现在可以遵循MISRA Compliance 2020指南的强制性和补充性法规遵循版本。感谢MISRA工作组继续做出色的工作,并为软件界做出了巨大贡献。
免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
------------ END ------------
后台回复『嵌入式C语言』『科普知识』相关文章。
欢迎关注我的公众号,回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
欢迎关注我的视频号:
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。
MISRA C:2012 又是什么标准?相关推荐
- 带你走近MISRA C:2012
汽车软件与C语言 随着软件定义汽车概念的兴起,汽车软件开发的工作量开始呈指数级增加,当前车载软件代码量已经达到1亿-3亿行.这是一个什么概念呢,相当于比Windows系统还高出一个数量级.据调查,大部 ...
- Simulink自动代码生成:如何标准化的建模?以MAB,MISRA C 2012建模规范为例
目录 为什么要规范建模 MAB,MISRA C2012建模规范步骤 常用的规范总结 生成代码配置 总结 为什么要规范建模 MathWorks 咨询委员会 (MAB) 规范规定了在 Simulink® ...
- 2012服务器系统标准版,windowsserver2012标准版_windows2012_server2012_微软镜像_5分享
这是Windows 8的服务器版本,并且是Windows Server 2008 R2的继任者.该操作系统已经在2012年8月1日完成编译RTM版,并且在2012年9月4日正式发售. 用户界面 简化服 ...
- misra c编码规范个人整理总结/misra c 2012中文版-个人总结-【方便查询】
整理MISAR-2012错误解决方法-带编号,本文根据文档整理了部分常见的MISAR-2012错误及解决方法,顺序是错误码顺序,参考文档<LDRA standards for C/C++> ...
- GB9706.1-2007+2020和IEC60601-1:2005 3.0+2012 3.1标准主要差异解析
目录 GB9706.1-2007医用电气设备 第1部分:安全通用要求 GB9706.1-2020医用电气设备 第1
- 回顾“90后”——MISRA的25年岁月
谈起MISRA这个名字,大家应该都不陌生,但,我们真的了解它吗?从90年代初期MISRA组织的发起至2020年,MISRA已走过25个年头.25年过去,90后已成长为现代社会发展的中坚力量,同样作为& ...
- 为什么您应该使用基于标准的开发实践
为什么您应该使用基于标准的开发实践 Why you should use standards-based development practices (even if you don't have t ...
- c++编码规范_汽车嵌入式软件测试——嵌入式软件标准及规范简介
以前接手过一个软件项目,翻开模型和代码之后的几天,把模型开发人员问候了一个遍.此处略过若干字......不禁要问,建模规范.编码规范不是很好吗?为什么不用?制定相关规范的出发点就在于保证每个人能在短时 ...
- 什么是MISRA?如何满足该行业标准?
MISRA:汽车工业软件可靠性联会,其核心使命是为汽车工业提供服务和协助,帮助厂方开发安全的.高可靠性的嵌入式软件.MISRA C则是由MISRA提出的针对嵌入式C语言开发标准,目的是提高嵌入式系统的 ...
最新文章
- KD树和LSH局部敏感哈希
- Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架
- (笔记)Linux内核学习(五)之中断推后处理机制
- HDU-1274 展开字符串
- mybatis :Criteria 查询、条件过滤用法
- spring事务传播,隔离级别,
- 来自微软华人的软件人生经历:功夫在身外
- python字典嵌套循环_python使用for循环更新嵌套字典值
- 选择器、像素和百分比、颜色单位、文档流-css基础
- DH算法原理深入详解
- 台式计算机入门基础知识,电脑基础知识:新手入门最全电脑知识干货
- vb.net 随窗口改变,缩放控件大小以及保持相对位置
- feishu-飞书api
- 游艇租用问题算法c语言,租用游艇问题 算法设计分析
- 新加坡南洋理工大学招募博士生、博士后、研究工程师和研究科学家
- Chinese Segmentation Introduction
- PythonWeb全栈开发介绍
- 考研那些事——那些年,我们一起度过的猪狗不如的生活
- CodeCraft-19 and Codeforces Round #537 (Div. 2)
- 联想k910 android6.0,联想K910官方系统rom固件刷机包
热门文章
- GB28181开源项目WVP部署详细流程
- 越南用户最受欢迎的付款方式
- 越南使用的越南文unicode编码范围
- Jekyll搭建个人博客 韩俊强的博客
- 带UI界面的学生管理系统
- ehchache验证缓存过期的api_SpringBoot - 缓存的使用详解1(使用Ehcache 2.x缓存)
- java swing 收银系统,Swing做的简单超市收银系统
- 网站管理助手4.0 mysql_网站管理助手v4.0 建站流程
- 计算机专业押韵口号16字,最牛班级口号霸气押韵16字
- 简历石沉大海?程序员简历到底该怎么写?