AUTOSAR C++ 14 指南是 MISRA C++ 2008 的一次更新,为 ISO/IEC 14882:2014 定义的现代C++提供了编码指南。
Adaptive AUTOSAR(自适应 AUTOSAR)
汽车行业在过去十年中发生了翻天覆地的变化。现代汽车引入的新功能从根本上将汽车本身变成了计算中心。在用于构建汽车软件的平台的开发中反应得特别明显,特别是AUTOSAR。
在编译时假定静态配置、没有动态内存分配以及C语言占主导地位的经典方法已不再适用。而以下新功能需要大量高级代码:
车道保持辅助
自动紧急制动
盲点监测
V2X通信(汽车之间以及车对基础设施的通信)
持续的无线更新
高清多媒体
AI计算、图像识别
这些新特性还需要对范式进行更改,以满足传统方法的需要。为了应对这些挑战并促进汽车发展,包括世界上大多数领先汽车制造商在内的AUTOSAR联盟于2017年3月发布了新版本的AUTOSAR标准,称为自适应AUTOSAR。
新标准的发布并未使经典平台失效,它仍将作为无连接需求、有限的硬件要求和硬实时功能的控制单元的首选。
自适应AUTOSAR定义了一个平台,用于开发汽车控制单元,该单元通过互联网提供先进的驾驶辅助系统,媒体流或软件更新等复杂功能。该平台包含定义服务和 API 的接口规范。自适应AUTOSAR中引入的一些新特性包括:
面向对象的方法
C++编程语言
面向服务的体系结构
POSIX操作系统
ECU配置在系统运行时发生变化
无线部署和更新
C语言不再满足需求
自适应AUTOSAR解决了现代汽车日益复杂的需求,以及互联世界模式给汽车系统带来的新挑战。C语言在过去是汽车开发人员的首选,如今却成为了一个阻碍因素。
系统的复杂性迫使人们从C语言切换到C++,这为构建大型分布式系统提供了更好的支持,并为数据封装提供了更好的机制。
自适应AUTOSAR依赖于 C++14 语言标准。语言标准版本的选择是在“不太旧”和“不太新”之间进行选择。一方面,我们有C++98和C++03,它们仍然广泛应用于汽车行业,但已经过时,不符合现代的开发模式。另一方面,当C++17标准发布时,它是比较新的,并且有争论要摒弃C++98和C++03,包括:
C++语言的重大改进
提供更好的编译器
更好的测试和分析工具的可用性
不采用C++17的主要原因之一是标准中引入的新功能可能会给系统带来安全风险——检测和理解安全漏洞需要一些时间。此外,符合C++17标准的C++编译器仍然是新的,需要更多的测试和更好的支持才能用于安全关键型开发。因此,选择依靠C++14标准作为合理的中间选项。
随着C++语言的不断发展,今天我们有C++20(ISO/IEC 14882:2020)取代了C++17。
为了支持C++17,AUTOSAR和MISRA联手制定了使用C++17的安全编码指南,并计划持续到C++20。对于许多组织来说,这是非常重要的,因为现代C++功能提供了在开发系统中非常重要的新创新。例如,使用AI依赖于C++最新版本中开发的现代架构,现代平台和现代库。
那么AUTOSAR 编码指南呢?
自适应AUTOSAR平台的发布增加了C++在汽车项目中的应用。这使得一个具体问题更加明显:虽然在过去几年中C++语言发展速度加快了,但汽车编码标准似乎已经落后了。
在C++11和C++14发布时,C++最流行的汽车编码标准MISRA C++2008已经严重过时,只能解决该语言的C++03版本。
随着每一年的发展,这个问题变得越来越棘手。开发人员广泛接受最新C++标准的新功能,并在没有适当指导或最佳实践的情况下开始使用它们。这种情况对于开发安全关键型系统的团队来说尤其成问题,ISO 26262要求这些系统使用静态分析以及适当的编码指南子集。
为了解决这个问题,AUTOSAR联盟发布了专门的指南,作为自适应AUTOSAR平台的一部分,标题为“在关键和安全相关系统中使用C++14语言的指南”。依靠未经修改的MISRA C++2008简直是一种不合理的选择。下面的时间线描述了这种情况。
1998 – C++98标准发布
2003 – C++03标准发布
2008 – MISRA C++2008 (封面 C++03)
2011 – C++11标准发布
2014 – C++14标准发布
2017 – AUTOSAR C++14 (3月)
2017 – C++17标准发布
2020 – C++20标准发
2022 – MISRA & AUTOSAR C++17 (待定)
2022 – MISRA & AUTOSAR C++20 (待定)
AUTOSAR C++14 编码指
AUTOSAR C++ 14 指南文件旨在作为 MISRA C++ 2008 的一次更新,并为 ISO/IEC 14882:2014 定义的现代C++提供编码指南。该编码标准主要应用于汽车行业,但它同样也可用于需要嵌入式编程的其他行业。
该标准规定了342条规则:
MISRA C++ 2008 中的 154 条规则未经修改采用 (67%)
131条规则基于现有的C++标准
57条规则基于研究或其他文献或资源
该标准有据可查,并提供了对其他现有C++标准的可追溯性,例如HIC ++ 4.0,JSF,SEI CERT C++,C++核心指南,当然还有MISRA 2008 C++。
AUTOSAR C++14 遵循 MISRA C++ 2008的规则分类方法。这些规则根据义务级别进行分类:
必要规则:声明符合标准的强制性规则
建议规则:建议但不具有强制性状态
此外,根据这些规则是否由静态分析工具自动执行,分类为:
自动化:可由静态分析工具完全支持
部分自动化:可以由静态分析工具支持,但可能需要其他实践,如代码审查
非自动化:不支持静态分析工具。
最后,根据分配目标对规则进行分类:实现、验证、工具链和基础设施。AUTOSAR C++14 标准中的规则将使用有关分类的信息进行标记。
下一期我们聊一聊,如何为支持 ISO 26262 的 AUTOSAR C++ 合规性选择合适的工具。