0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

带你走近MISRA C:2012

北汇信息POLELINK ? 2022-10-13 14:37 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:给你小鱼干小编:吃不饱

01

汽车软件与C语言

随着软件定义汽车概念的兴起,汽车软件开发的工作量开始呈指数级增加,当前车载软件代码量已经达到1亿-3亿行。这是一个什么概念呢,相当于比Windows系统还高出一个数量级。据调查,大部分的车载软件都是使用C语言进行开发,因为C执行效率高、代码量小,因此在汽车的小型控制部件中被广泛使用。尽管C语言在嵌入式系统中如此流行,但仍有很多缺陷:

1

C是弱类型语言

在下面代码中,char类型和int类型是可以直接运算的,因为char类型会被提升为int,这就是C中的隐式类型转换,将精度较小的转换为大精度的,在这个意义上讲,它并不符合强类型语言的定义。

#include

int main(void){

char a='a';

int b=10;

int c=a+b;

return 0;

}

2

C有更多操作符及优先级

C相较于其他的语言有更多的操作符,因此其也有更多不同的操作符优先级,其中的大多数都不是能直观判断的,所以通常会被程序员误解。

3

C程序一般不为常见问题

提供运行时检查

C程序一般不为常见问题提供运行时检查,例如运算异常(如零除),溢出,指针的有效性或者数组越界。

02

MISRA C编码规范

综上所述,C语言对于安全性要求很高的汽车软件而言是不安全的。汽车工业软件可靠性协会(Motor Industry Software Reliability Association,MISRA)在1998年发布了第一版针对汽车工业软件安全性的C语言编码规范---MISRA C,让程序员有规范可循。从1998年发布的MISRA C:1998,只针对汽车制造业的嵌入式开发,到MISRA C:2012,已经开始扩大覆盖范围到其他高安全性系统。下面我们就看一下具体的MISRA C:2012规则内容。

03

MISRA C:2012规则介绍

MISRA C:2012包含159条规则,其中Directives有16条,Rules有143条。

01

Dir 4.12:动态内存分配不应被使用。

a009cbba-4a6e-11ed-b116-dac502259ad0.png

图1 Dir 4.12规则

原理:任何库的动态内存分配和进程的释放都可能导致未定义的行为。

02

Rule 10.3:表达式的值不应分配给具有较窄基本类型或不同基本类型类别的对象。

a03f348a-4a6e-11ed-b116-dac502259ad0.png

图2 Rule 10.3规则

原理:C语言允许程序员有相当大的自由度,并允许自动形成不同算术类型之间的赋值。然而,使用这些隐式转换可能会导致意外的结果,可能会丢失值、符号或精度。如MISRA基本类型模型所强制的,使用更强的类型可以降低这些问题发生的可能性。

看到这里,相信大家有许多疑问:为什么一个是Dir而另一个是Rule呢?Category、Analysis这些又是什么呢?下面就来介绍一下MISRA规则的分类和属性。

04

MISRA C:2012规则分类

MISRA C:2012的规则按照性质分为两类:指令(Directives)和规则(Rules)。规则有三种不同类别:”强制(Mandatory)”、”要求(Required)”和“建议(Advisory)”;其中具体结果如下图所示。

a0506e6c-4a6e-11ed-b116-dac502259ad0.png

图3 MISRA C:2012规则分类那么,在任何情况下都可以明确地说明该条代码违反了规则吗?出于此问题,MISRA C:2012规则的Rules具有可判定性Decidable/Undecidable,他们的区分标准为是否能在任何情况下明确回答“该代码是否遵循了这条规则”?a08f1450-4a6e-11ed-b116-dac502259ad0.png图4 MISRA C:2012规则的可判定性要注意的是,可判定性并不适用于Directives规则。Rules的分析范围分为Single Translation Unit/System:a0a0ed56-4a6e-11ed-b116-dac502259ad0.png图5 Rules的分析范围

05

Helix QAC与MISRA C:2012

很明显,MISRA C:2012规则就是为静态测试而生的。Perforce公司的静态分析工具Helix QAC,是汽车行业中主流的静态分析器,其开发团队是MISRA C&C++编码委员会的创始会员,也是MISRA C&C++委员会最具影响力的会员。Helix QAC具有业界领先的编码规范覆盖度,目前MISRA C:2004的编码规范覆盖度达到了99%,而对MISRA C:2012的编码规范覆盖度已达到100%。是嵌入式静态分析领域公认的行业领导及先驱。a0b7196e-4a6e-11ed-b116-dac502259ad0.png图6 Helix QAC的编码规范覆盖度下面以开源工程wget为例,演示一下Helix QAC是如何定位违反MISRA C:2012规则的代码。a0cafb00-4a6e-11ed-b116-dac502259ad0.png图7 HelixQAC诊断消息0883诊断消息0883:“包含文件代码不受重复包含的保护”正是MISRAC:2012规则Dir 4.10的映射,通过诊断消息开发人员就可以了解到代码违反MISRA C:2012规则的情况,从而对代码进行修改使其合规。a0fe16f2-4a6e-11ed-b116-dac502259ad0.png图8 Rule 9.1规则的不同诊断消息Rule 9.1:对象在初始化前不能被使用。a134044c-4a6e-11ed-b116-dac502259ad0.png图9 Rule 9.1规则这里大家或许会疑惑,为什么同一个规则下会产生两种诊断消息呢?答案是:数据流分析。数据流分析是Helix QAC的高级分析,Helix QAC通过内置的数据流分析器分析运行时的行为。数据流分析可以识别各种问题,包括可能指示编码错误的条件,以及可能导致程序崩溃的关键未定义行为。我们可以看到图中的诊断消息2962和2963虽然都是Rule 9.1产生的,但是分成了Suspicious和Apparent两种。我们在代码中看一下这两条诊断消息的不同。诊断消息2963的源码如下:a13ec814-4a6e-11ed-b116-dac502259ad0.png
在226行声明了数组saved_lengths,241行对saved_lengths进行赋值操作,在255行使用saved_lengths。但saved_lengths的赋值操作不一定会进行,因为该操作在for循环中进行,如果for循环没有达到执行条件导致并未执行,那么此时saved_lengths就没有初始化。所以此条诊断消息是Suspicious。诊断消息2962源码如下:a163cf2e-4a6e-11ed-b116-dac502259ad0.png
可以看到,在824行声明变量dt,但后面并未对dt进行初始化。所以此条诊断消息是Apparent。
由此可见Helix QAC数据流分析功能的强大。Helix QAC的数据流功能也在不断地更新,在即将到来的新版本2022.4中,数据流计划从Helix QAC引擎中分离出来,成为自己的组件。在近期发布的最新版本Helix QAC 2022.3中,引入了对微软Visual Studio 2022的支持,提供更广泛的编译器支持,以及对C++20和C23的升级语言支持。此外,此版本具有使用“qainject”自动生成 CCT 的功能,可简化构建理解和编译器设置。作为Perforce公司的合作伙伴,北汇信息将为客户提供优质的静态代码测试工具和服务。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 汽车软件
    +关注

    关注

    1

    文章

    135

    浏览量

    3529
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(一)

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(一)
    的头像 发表于 06-20 20:00 ?620次阅读
    漫画科普 | 功率放大器到底有哪些应用?<b class='flag-5'>带你</b>解锁功放经典应用场景!(一)

    基于ESP32C3的智能小车设计

    你有没有想过,从零开始亲手制作一辆坚固耐用的遥控越野车?今天,小编就带你走进一个融合机械、电子与物联网的精彩DIY项目——一款由 Seeed Studio XIAO ESP32C3 强力驱动的 3D打印4x4 RC漫游车!
    的头像 发表于 06-04 11:11 ?1143次阅读
    基于ESP32<b class='flag-5'>C</b>3的智能小车设计

    X1A000171000300,FC2012AN,32.768kHz,2012mm,EPSON晶振

    产品简介X1A000171000300,FC2012AN,32.768kHz,2012mm,EPSON晶振,日本进口晶振,EPSON晶振,爱普生晶振,型号:FC2012AN,编码为
    发表于 05-13 17:03 ?0次下载

    Helix QAC 2025.1 重磅发布!MISRA C:2025? 100%覆盖

    Helix QAC 2025.1新增功能 Helix QAC 2025.1实现了对新版MISRA C:2025?标准的 100% 覆盖,并提供对应的合规模块。此版本还扩展了对 CERT C
    的头像 发表于 05-13 16:48 ?698次阅读
    Helix QAC 2025.1 重磅发布!<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025? 100%覆盖

    MISRA C:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    MISRA C:2025?发布!新增5条规则,并对部分现有规则进行了扩展、重组,以进一步简化安全关键型系统的开发流程。如何实现最新MISRA合规性?
    的头像 发表于 05-08 17:58 ?1241次阅读
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    hyper 2012 r2,Hyper 2012 R2:经典版本功能与使用

    在日常工作中,我们常常需要对大量文件、数据或任务进行重复性操作,这些工作不仅耗时费力,还容易出错。幸运的是,批量管理工具的出现为这些问题提供了高效的解决方案。今天就为大家介绍Hyper2012
    的头像 发表于 02-08 10:11 ?750次阅读
    hyper <b class='flag-5'>2012</b> r2,Hyper <b class='flag-5'>2012</b> R2:经典版本功能与使用

    EV2012、bq2012评估系统产品简介

    电子发烧友网站提供《EV2012、bq2012评估系统产品简介.pdf》资料免费下载
    发表于 12-21 11:17 ?0次下载
    EV<b class='flag-5'>2012</b>、bq<b class='flag-5'>2012</b>评估系统产品简介

    杰和课堂|带你认识算力

    杰和课堂|带你认识算力人工智能浪潮汹涌的今天,算力一词频繁出现在各类科技新闻、产业发展报告中。了解过杰和科技产品的读者们,也会在杰和各产品参数中发现算力这一概念,比如AI一体机主板CB4-411,该
    的头像 发表于 12-06 10:24 ?1389次阅读
    杰和课堂|<b class='flag-5'>带你</b>认识算力

    5CGTFD7D5F27C7N Intel/Altera可编程逻辑器件(CPLD/FPGA)

    Altera 的Cyclone? V系列FPGA,型号5CGTFD7D5F27C7N,一篇文章带你解读,该型号的基本属性。
    的头像 发表于 11-29 15:26 ?1099次阅读
    5CGTFD7D5F27<b class='flag-5'>C</b>7N Intel/Altera可编程逻辑器件(CPLD/FPGA)

    CMPA601C025F 6-12GHz频段的25瓦GaN功率放大器

    一篇文章带你解读,MACOM的CMPA601C025F 6-12GHz频段的25瓦GaN功率放大器
    的头像 发表于 11-22 18:22 ?1006次阅读
    CMPA601<b class='flag-5'>C</b>025F 6-12GHz频段的25瓦GaN功率放大器

    Agilent安捷伦DSO-X2012A 示波器

    Agilent安捷伦DSO-X2012A示波器:100 MHz,2 个模拟通道 DSO-X2012A是安捷伦2000X系列的100MHz示波器提供2个模拟通道、100 kpts存储器和高达
    的头像 发表于 11-22 16:16 ?850次阅读

    探知 FLC057WG C波段高功率 GaAs FET的神秘

    一篇文章带你,探知 FLC057WG C波段高功率 GaAs FET的神秘
    的头像 发表于 11-15 16:03 ?1004次阅读
    探知 FLC057WG <b class='flag-5'>C</b>波段高功率 GaAs FET的神秘

    智慧公交是什么?一文带你详解智慧公交的解决方案!

    智慧公交是什么?一文带你详解智慧公交的解决方案!
    的头像 发表于 11-05 12:26 ?1107次阅读
    智慧公交是什么?一文<b class='flag-5'>带你</b>详解智慧公交的解决方案!

    DL-T259-2012六氟化硫气体密度继电器校验规程

    DL-T259-2012六氟化硫气体密度继电器校验规程musen
    发表于 10-21 11:46 ?16次下载

    C2000? MISRA-C策略

    电子发烧友网站提供《C2000? MISRA-C策略.pdf》资料免费下载
    发表于 10-11 11:43 ?0次下载
    <b class='flag-5'>C</b>2000? <b class='flag-5'>MISRA-C</b>策略