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

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

3天内不再提示

在MISRA合规环境中控制汽车软件偏差

星星科技指导员 来源:嵌入式计算设计 作者:Fergus Bolger 2022-06-15 15:45 次阅读

C 和 C++ 在某种程度上是嵌入式软件开发中使用最广泛的语言。VDC 最近的研究表明,70% 的受访嵌入式系统公司使用 C,42% 使用 C++。几乎每个处理器都实现了 C。它提供了广泛的资源和库,并得到了广泛的工具的支持。

尤其是 C 语言,允许开发人员做许多本质上不正确的事情。编写符合语言标准的代码太容易了,但会导致程序失败(崩溃)或未定义的行为。常见的示例是导致访问数组边界之外的内存的代码或导致整数溢出的算术运算。

编码标准的哲学

业界接受的解决这些危害的方法是采用“编码标准”。最简单的编码标准定义了一组一致的编码实践。尽管风格的统一性在软件项目中可能很有价值,但它们并没有解决软件质量的重要属性,例如可靠性、可移植性或可维护性。编码标准更基本的作用是通过制定一组规则来定义编程语言的更安全的子集,以消除已知危险的编码结构。

体现这一安全子设置原则的汽车工业软件可靠性协会 (MISRA) 编码指南现已在全球范围内被公认为用 C 和 C++ 开发安全关键型软件的基准。它们已被广泛接受,因为它们简洁易读,并且专注于基本问题。最近一项针对 500 名受访者的民意调查 (Ganssle, 2014) 揭示了一些关于编码标准采用率的有趣数据[1]。主要发现表明,在使用的所有编码标准中,约有 60% 是基于 MISRA 的。采用的严格性是另一个有趣的发现,基于 MISRA 的编码规则集在开发团队中实现了 75% 的一致性使用,而其他规则集的使用率不到 50%。

偏差原理

MISRA 编码标准包含广受推崇的 C 和 C++ 语言开发指南。这些指南侧重于开发关键软件系统时的重要问题。MISRA 还认识到,在某些情况下,遵守编码指南是不合理甚至不可能的,并且有必要偏离某些规则。偏差说明了在特定情况下不遵守特定编码规则的原因。它还提供了放宽特定规则的程度的理由和描述,并提供了一个适当构建的安全案例,包括减轻不遵守的影响。

但是,如果没有仔细说明违规范围,基本偏差工具可能会被误解或滥用,并最终破坏指南的有效性。

限制偏差的使用

就像编码标准本身需要客观的创造和充分理解的理由一样,偏离编码规则的原因同样需要一个共同的表达和商定的解释以及它们的应用范围。汽车行业是 MISRA 最初且仍处于领先地位的应用领域,它已面对这一要求。MISRA 本身和一个国家机构日本汽车制造商协会 (JAMA) 都已开始制定允许特定偏离完全 MISRA 合规性的条件的过程。

这项工作的主旨是定义一组严格限制范围的规则偏差。一个重要的第一阶段是对偏离规则不合规的广泛原因进行分类。

分类偏差原因

通过将偏差分为以下几类,合规的实际困难变得更加明显。此外,这种分类可以防止不适当的偏差和编码标准意图的弱化。

表现

建议将性能作为不遵循良好编码实践的原因似乎很奇怪且不直观,但以下现实生活中的情况证明了这种需要:

作为车辆发动机控制系统的一部分,需要定期累积正时变量。该代码经过正确制定以符合 MISRA-C:2012 规则 10.6(不应分配给更广泛类型的值),内容如下:

extern uint16_t 数量,time_step;uint32_t prod = (uint32_t) 数量 * (uint32_t) time_step;

强制转换确保 16 位操作数不会在此编译器的 32 位乘法中溢出。但是,编译器使用长乘法的“移位和加法”模式而不是它配备的 IMUL(有符号乘法)模式来执行此操作。编译器供应商已澄清 IMUL 模式仅发生在隐式转换上,要求表达式读取:

uint32_t 产品 = 数量 * 时间步长;// 偏离规则 10.6

通过在这种情况下允许隐式转换,保证了单个时钟周期的 IMUL 操作,而不是前者的约 100 个时钟周期的最坏情况执行,从而证明了基于性能的受控偏差是合理的。

外部(第三方)代码

此类别包括通用库、自动生成的代码和遗留的内部代码模块,甚至只是包含关键应用程序算法的复杂函数。公共领域库的维护者,鉴于其广泛的应用领域,很少有动力遵守 MISRA 或其他编码标准。自动生成的代码,除非符合 ISO 26262 等功能安全标准,否则可能包含固有的 MISRA 违规。遗留代码可能早于项目采用 MISRA。为满足 MISRA 规则而进行的可能重构的影响分析本身可能会引起关注。所有这些情况下的安全案例都是基于“使用合格”的依赖以及其他特定的质量措施。

构建配置

汽车供应商应用程序的一个特殊功能是根据客户需要提供单个代码库的许多变体。不是对这种交付进行构建级控制,而是部署配置机制来控制每个变体的功能交付。因此,MISRA 合规性可能会在冗余代码、表达式不变性和相关的全局问题方面受到影响。

访问硬件

为了访问寄存器、寻址绝对内存和控制中断,嵌入式开发人员需要访问特定于编译器的 C 语言扩展,从而导致不符合 MISRA。安全案例通常需要仔细的单元测试覆盖。

防御性编码

鉴于 C 语言中缺乏强大的异常处理功能,防御性编码实践可能涉及例如对不可预见行为的编程防护。一个功能齐全的分析工具将正确检测不变的条件和无法访问的代码。安全案例必须涉及这些路径或条件的强制单元测试执行。

语言特点

使用“最近的”语言结构有有效的代码质量原因,例如布尔或“long long”类型或内联函数。但是,这些可能需要偏离旧版本的 MISRA。安全问题是即使有 15 年历史的 C99 结构也不能保证得到所有编译器的支持。

受控偏差的结构

对不同的基本原理进行分类是创建适当约束的偏差结构的第一步。这自然会导致按规则和类别详细说明所有特定的已知偏差案例。MISRA 和 JAMA 都在行业参与的情况下记录了一组规则范围限制,每个限制都有详细的理由和安全案例。

即使在汽车领域之外,这些举措也很重要。MISRA 编码标准最初是为汽车行业设计的,但从早期开始,它就被许多其他嵌入式环境所采用,从消费产品到医疗设备,从工业控制EDA。同样,对于任何采用编码标准的人来说,建立一个受控偏差结构都很重要。

自动化工具支持

没有自动执行手段和丰富的审计和报告能力的编码标准将很快成为书柜的装饰品,很少被引用或遵循。一个称职的自动化静态分析工具的起点必须是其诊断输出的准确性、对所提出的每个问题的清晰理解和解释,以及针对软件项目的每个版本的详细报告。

但即使是自动化工具执行环境也需要了解和应用已批准的偏差政策,特别是因为这消除了完全合规的障碍。编码规则和偏差策略都必须方便开发人员、领导和经理信任,并便于详细的 QA 报告。

基本偏差系统会将规则抑制的每个实例与其支持偏差耦合,并在相关源代码的生命周期内保持这种耦合(图 1)。在处理受控偏差时,要求更加复杂。对相关编码规则的任何压制都必须遵守更严格的有效限制,并且在该受控偏差集之外不得进行压制。在选择要抑制报告诊断的特定代码位置时,必须限制开发人员仅使用允许的受控偏差范围进行抑制。

图 1:受控偏差的工具执行。

poYBAGKpjjGAEH2bAASYgZJvdl8221.png

关键系统的安全代码

MISRA C 编码标准是在许多嵌入式环境及其他环境中安全和防御性使用 C 的代名词。由于在 C 语言的限制使用方面既全面又广泛,控制偏差的系统现在被认为是必要的,正如各种行业和社区为指定这种缩减所做的努力所证明的那样。现在正在为工业用途制定合理的具体偏差原因。对受控偏差计划的复杂和自动化工具支持以及报告和合规解决方案的其他元素今天可用。

审核编辑:郭婷

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

    关注

    5082

    文章

    19111

    浏览量

    304845
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120244
  • 编译器
    +关注

    关注

    1

    文章

    1624

    浏览量

    49109
收藏 人收藏

    评论

    相关推荐

    IEEE802.3bt的

    怎么知道部件是否真正符合以太网 IEEE 标准?在上次 IEEE802.3bt 任务组会议讨论 PSE 的可能故障检测方法时提出了该主题。与 USB 不同,USB 实施者论坛制定了
    发表于 09-14 11:00

    软件编程规范(MISRA-C)

    MISRA-C是一种汽车制造业嵌入式C编码标准。FreeRTOS符合MISRA-C编程规范,就连大名鼎鼎的uCOS也宣称基本符合MISRA-C编程规范。
    发表于 11-02 18:29 26次下载

    MCU实现汽车功能安全

    MCU实现汽车功能安全
    发表于 01-12 22:20 18次下载

    汽车电子行业的MISRA C标准分享

    之前给大家分享过 MISRA C 相关的内容,今天给大家分享一份汽车电子行业的MISRA C标准。 什么是MISRAMISRA (The
    的头像 发表于 05-11 13:43 1899次阅读

    MISRA性的五个实用技巧

    回过头来对违规行为进行详细分析,很容易看到关于整个过程的更大问题。MISRA 的文档“MISRA 性:2016”比语言子集本身受到的新闻报道要少得多,但它对于了解您选择的静态分析工
    的头像 发表于 07-22 08:06 1554次阅读
    <b class='flag-5'>MISRA</b><b class='flag-5'>合</b><b class='flag-5'>规</b>性的五个实用技巧

    MISRA C安全可靠编程的地位

    C编程语言的普及,以及它的许多陷阱和陷阱,导致了MISRA CC用于高完整性软件的领域取得了巨大的成功。这一成功促使工具供应商提出了许多MISRA C检查器的竞争实现。工具
    的头像 发表于 11-23 11:55 966次阅读
    <b class='flag-5'>MISRA</b> C<b class='flag-5'>在</b>安全可靠编程<b class='flag-5'>中</b>的地位

    Parasoft支持更新MISRA C:2012,提供最新的安全和合编码指南

    作为拥有30多年自动化软件测试经验的全球领导者Parasoft,今天宣布支持MISRA C:2012修正案3(AMD3)和技术更正2(TC2)。作为MISRA委员会的成员,Parasoft一直
    的头像 发表于 02-06 14:15 1086次阅读

    如何将MISRA C:2023整合到您的嵌入式开发流程

    MISRA C不是编码风格指南,而是一套规则和指令,用于最小化或消除已知危险的编码实践。鉴于对安全和安保关键型系统的这种重要性,AMD4 和 MISRA C:2023 版本使开发人员有机会重新审视其流程,以改进对有效和高效地证明 MIS
    的头像 发表于 05-04 09:58 2967次阅读
    如何将<b class='flag-5'>MISRA</b> C:2023整合到您的嵌入式开发流程<b class='flag-5'>中</b>

    汽车安全如何发挥作用

    汽车安全汽车制造商和零部件制造商必须完成的一项工作,以便开发对确保安全性来说至关重要的硬件和软件产品,并达到
    发表于 05-16 15:31 328次阅读

    润和软件联合主办openEuler &amp; OpenHarmony 社区SIG开源共建研讨会

    近日,由江苏润和软件股份有限公司(以下简称“润和软件”)参与联合主办的“openEuler OpenHarmony 社区 SIG 开源
    的头像 发表于 06-27 11:30 605次阅读
    润和<b class='flag-5'>软件</b>联合主办openEuler &amp; OpenHarmony 社区<b class='flag-5'>合</b><b class='flag-5'>规</b>SIG开源<b class='flag-5'>合</b><b class='flag-5'>规</b>共建研讨会

    静态代码分析器工具Helix QAC 2023.2: 提供 100% 的 MISRA C:2012 和 MISRA C:2023 规则覆盖率

    Helix QAC 2023.2 提供 100% 的 MISRA C:2012 和 MISRA C:2023 规则覆盖率,并更新相应的性模块以支持
    的头像 发表于 07-31 22:53 1183次阅读
    静态代码分析器工具Helix QAC 2023.2: 提供 100% 的 <b class='flag-5'>MISRA</b> C:2012 和 <b class='flag-5'>MISRA</b> C:2023 规则覆盖率

    嵌入式软件代码:简单几步来满足关键软件开发项目的需要

    什么是软件?有哪些软件标准?什么是代码标准?什么是功能安全标准?什么是功能信息安全标准?软件
    发表于 03-16 16:46 1次下载

    用“开源”的方式讲开源的“诊所”,等你来问!

    和法律体系,鼓励企业开放软件源代码、硬件设计和应用服务” 。 ——十四五规划 近年来,我国开源生态发展态势迅猛,“开源吞噬软件”的态势我国已悄然揭开新篇章。随之而来的开源
    的头像 发表于 12-05 19:35 714次阅读
    用“开源”的方式讲开源的<b class='flag-5'>合</b><b class='flag-5'>规</b>,<b class='flag-5'>合</b><b class='flag-5'>规</b>“诊所”,等你来问!

    芯来、IAR和MachineWare合作加速RISC-V ASIL汽车芯片的创新

    芯来科技、IAR和MachineWare紧密合作,加速RISC-V ASIL汽车解决方案的创新。此次合作简化了汽车电子的固件和MCAL开发,提供了虚拟和物理硬件平台之间的无缝集成。
    的头像 发表于 04-09 11:25 833次阅读

    whitepaper-perforce-what-is-misra

    如果您熟悉嵌入式软件的世界,您可能听说过安全关键系统的MISRA编码准则和合性。最初为汽车嵌入式软件
    发表于 08-08 15:54 0次下载