8分钟让你熟悉自适应AUTOSAR的AUTOSAR C++14编码准则
AUTOSAR C++14准则是MISRA C++ 2008的更新,提供了ISO/IEC 14882:2014所定义的现代C++的编码准则。
自适应AUTOSAR
在过去的十年中,汽车行业发生了翻天覆地的变化。现代汽车引入的新功能已从根本上将其转变为计算中心。这反映在用于构建汽车软件的平台(特别是AUTOSAR)的开发中。在编译时假设静态配置,没有动态内存分配以及C语言占主导地位的“经典”方法不再足够。新功能需要大量高级代码,例如:
- 自动驾驶
- V2X通信(车对车和车辆对基础设施通信)
- 持续的空中更新
- 高清晰度多媒体
- 人工智能计算,图像识别
这些新功能还需要对范式进行更改,而这些更改对于经典方法是足够的。为了应对这些挑战并改善汽车发展,包括全球大多数领先汽车制造商在内的AUTOSAR联盟于2017年3月发布了新版本的AUTOSAR标准,称为自适应AUTOSAR。
新标准的发布不会使Classic Platform失效,对于没有连接需求,硬件要求有限和实时功能坚硬的控制单元,它仍然是首选。
自适应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标准作为合理的中间选择。
关于AUTOSAR编码准则?
自适应AUTOSAR平台的发布增加了现代C++在汽车项目中的采用。这使一个特定的问题更加明显:尽管近年来C++语言的发展加快了,但汽车编码标准似乎落后了。在发布C++11和C++14时,用于C++的最流行的汽车编码标准MISRA C++ 2008已经严重过时,并且仅解决该语言的C++03版本。
每年,问题都在增长,并且变得越来越棘手。开发人员广泛接受了最新C++标准的新功能,并在没有适当指导或最佳实践的情况下开始使用它们。对于开发安全关键系统的团队而言,这种情况尤其成问题,ISO26262要求这些安全关键系统必须使用带有适当编码准则子集的静态分析。
为解决此问题,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标准发布(12月)
2020年– 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 C++ 2008。
AUTOSAR C++14遵循MISRA C++ 2008中的规则分类方法。根据义务级别对规则进行分类:
必需规则:声称符合标准的强制性规则
咨询规则:推荐但无强制性地位
此外,还对这些规则是否由静态分析工具自动实施进行了分类:
自动化:可由静态分析工具完全支持
部分自动化:可以由静态分析工具支持,但可能需要其他实践,例如代码检查
非自动化:静态分析工具不支持。
最后,根据分配目标对规则进行分类:实施,验证,工具链和基础架构。AUTOSAR C++14标准中的规则标记有有关分类的信息,例如:
我们要如何应对?
MISRA联盟在2016年发布了一份文件,标题为“MISRA Compliance:2016实现对MISRA编码准则的遵守”。该文档在业界非常受欢迎,因为它满足了定义实现合规性流程的非常重要的需求,并明确说明了合规性的含义。
AUTOSAR C++14没有(至少没有直接提供)关于达到合规性过程的任何类似指南。但是,鉴于AUTOSAR C++准则是基于MISRA C++ 2008的,因此有必要再次参考MISRA标准,以寻求有关实现合规性流程的指南。
生成一个合规性矩阵,该矩阵说明每个规则的执行方式
产生偏差程序
正式制定质量管理体系内的工作惯例
满足这些要求意味着一些额外的文书工作。应该发生的第一件事是对合规性矩阵的定义,这实际上是对我们将如何执行每条准则的声明。请参见下面的示例:
理想的情况是拥有一个静态分析工具,该工具应涵盖尽可能多的准则。无法通过静态分析强制执行的规则很可能需要手动检查,这很昂贵。
除了合规性矩阵外,还需要建立偏差处理程序。当开发需要偏离特定准则时,偏离程序将需要采取的步骤正式化。按照MISRA的规定,预计
“……程序将基于为每个偏差或偏差类别获得签字。”
——MISRA
这是一个非常重要的难题——它可以防止开发人员随意偏离偏差概念。实际上,我们将需要某种形式的正式票据存储在我们的系统中,以记录源代码中的每个偏差。这与合规性矩阵以及为实施合规性而创建的任何其他配置和过程描述有关。 MISRA C++2008在这里非常清楚,要求“在质量体系内进行形式化”。
最后,如果MISRA C++ 2008点4.3中描述的所有过程均已就绪,我们可以通过证明以下内容来声明其合规性:
已完成合规性矩阵,显示了如何强制执行合规性
产品中的所有C++代码均符合MISRA C++2008文档的规则或有记录的偏差
正在维护未遵循规则的所有实例的列表,并且每个实例都有适当的签名偏差
“MISRA Compliance:2016”文档更新了MISRA C++2008中给出的建立法规遵从流程的指导。一些团队可能更喜欢将它用作AUTOSAR C++14遵从性过程的基础,因为它是更新且更详细的。与MISRA C++ 2008一样,“MISRA Compliance:2016”也需要一个正式的流程来处理偏差,并且您必须记录每条适用指南的说明实施方法。该文档称为准则执行计划(GEP)。
“MISRA Compliance:2016”扩展了合规性流程的要求,并引入了一些新概念,例如准则重新分类计划(GRP),正式记录了对规则类别引入的任何更改,以及准则合规性摘要(GCS),这基本上是合规流程中的最后一个工件,介绍了每个准则所达到的合规水平。
“MISRA Compliance:2016”还使用了MISRA C 2012中引入的规则分类,并且不同于MISRA C++ 2008和AUTOSAR C++14标准中的规则分类。但是,这些差异似乎并不是根本性的,采用“MISRA Compliance:2016”作为AUTOSAR C++14的基础当然是一种选择。
在Parasoft C/C++test中支持AUTOSAR C++14
强制遵守诸如AUTOSAR C++14之类的编码标准的唯一实用方法是使用静态分析工具,例如Parasoft C/C++test,这是一种支持多种测试技术的代码质量工具。与任何其他代码质量工具相比,Parasoft C/C++test支持AUTOSAR C++。AUTOSAR C++14规则是Parasoft汽车合规性软件包的一部分,该软件包专门为汽车开发人员扩展了Parasoft C/C++test的功能。除了特定于行业的静态分析规则(例如AUTOSAR C++14,HIC++或MISRA)之外,Parasoft的Automotive Compliance Pack还提供了完善的交互式报告系统,该系统可根据AUTOSAR,HIC++和MISRA的要求进行定制,并支持高效的团队日常工作流程。
Parasoft C/C++test使开发人员可以在不离开IDE的情况下检查其代码的符合性,并将扫描过程集成到服务器上的CI构建中。借助Parasoft的汽车特定报告系统,团队成员可以轻松地持续监控其合规过程。
在清理现有代码库时,团队可以从创建符合性策略的能力中受益,这些策略定义了确保测试实践一致性的内容。在这种情况下,建议的做法是从标准中的规则子集开始,并随着代码清除的进行逐渐增加活动规则的数量。通过此报告层,您可以不断监视代码库的进度,控制偏差过程并就扩展规则集做出有根据的决策。
我们可以走到哪一步?
汽车行业正在动态发展。在许多其他变化中,我们正在见证汽车向一种更像是使用智能手机的体验的转变。以应用程序形式购买汽车的特定功能的概念是现实的。长途度假?为什么不购买2周的巡航控制系统?
为了应对这些挑战并可能减少开发时间,汽车行业需要在现代汽车所使用的硬件和软件平台领域进行不断的创新。这些创新需要得到不同级别的适当标准的支持,以确保功能安全性,质量和安全性。AUTOSAR C++14无疑为这一过程做出了贡献。
但是,标准本身只是一张纸(如果我们将它们打印出来的话),没有工具就无法实现这些标准,而这些工具必须使实践和过程实现自动化,并使汽车软件开发团队能够专注于提供更好和更高级的功能。Parasoft C/C++test是对安全性至关重要的C/C++开发的最完整解决方案,比其他任何工具供应商都对汽车编码标准(AUTOSAR C++,CERT C/C++,MISRA)提供更多支持,并且动态、灵活,以及有用的报告系统,可让您的整个团队成功实现合规性。
获取cpptest正版免费试用>>
8分钟让你熟悉自适应AUTOSAR的AUTOSAR C++14编码准则相关推荐
- 一分钟教你熟悉国战流程
[摘要]征途手机版的国战从宣战到胜利的整个流程. 国战可谓是<征途(微博)手机版>标志性的玩法,提起征途,人们首先就会想到"万人国战"!国战的场面可以说是千人同屏战斗, ...
- 数据3分钟丨CSDN 1024程序员节来啦!PostgreSQL 14和openGauss 2.1.0在同一天正式发布。...
数据 3 分钟 由 ACDU (中国 DBA 联盟) 与墨天轮联合出品的全新视频节目上线啦-三分钟带你来了解数据行业动态,节目内容主要包含数据行业最新的产品发布.公司大事件.行业新闻等. 本期内容概览 ...
- 详解AUTOSAR:AUTOSAR方法论(理论篇—3)
目录 1.编写系统配置输入描述文件 2.系统配置 3.提取特定ECU的描述 4.ECU配置 5.生成可执行文件 AUTOSAR方法论是指AUTOSAR为汽车电子软件系统开发过程定义的一套通用技术方法. ...
- 自适应学习率算法.基于阿米霍步长准则的线性回溯搜索算法
解决在梯度下降等算法中,学习率步长的问题. 二分精确搜索法把梯度转化为和学习率的函数,问题转化为找学习率的问题, 然后寻找梯度最低的时候的学习率是多少,在此过程中用了二分法查找学习率.是一种精确搜索方 ...
- 【AUTOSAR】AUTOSAR开发工具链(三)----劳特巴赫trace32的使用
1:主要产品 2:调试问题总结-以aurix Tc234L为例 3:Trace功能介绍 4:脚本语言介绍
- 【AUTOSAR】AUTOSAR开发工具链(五)----polyspace-bug-finder 简单操作说明
1.打开polyspace-bug-finder,新建工程文件:File New Project,命名,选择保存路径,然后点击Next. 2.找到需要检测的文件,然后点击"Add ...
- 代码质量与安全 | 一文了解高级驾驶辅助系统(ADAS)及其开发中需要遵循的标准
高级驾驶辅助系统(ADAS)有助于提高车内每个人的安全性,帮助他们安全抵达目的地.这项技术功能非常重要,因为大多数的严重车祸都是人为错误造成的. 本篇文章将讨论什么是高级驾驶辅助系统(ADAS),提供 ...
- 来来来!我告诉你 AUTOSAR架构深度解析从入门到放弃
如何快速学习AUTOSAR? 关于AUTOSAR的背景和架构信息,这里就不详细展开了.大家可以参看: AUTOSAR的分层架构 一文了解.今天我们重点讲讲如何快速学习AUTOSAR架构的方法. 如何获 ...
- 如何确定autosar的版本_AUTOSAR编码指南(中文版)
在汽车应用领域,软件开发变得越来越重要.随着安全.环境以及便利性需求的增长,车辆中应用电子系统的数量也在急速增长.其中有90%的创新应用都是基于软件驱动的电子组件.而这些组件的研发成本占车辆开发成本的 ...
最新文章
- java集合类深入分析之TreeMap/TreeSet篇
- android应用程序的混淆打包(转)
- office2003/2007/2010如何卸载干净
- milp的matlab的案例代码_Matlab神经网络30个案例第1案例代码
- 如何使用 SAP CDS view 中的 currency conversion 功能
- oracle不能访问管理页面,Oracle Grid Control CONSOLE无法打开9i数据库的管理维护页面...
- bootstrap模态框垂直居中显示
- javascript中面向对象的5种写法
- docker集群部署:第3部分:服务
- 【重磅】人工智能长篇报告:1.5万字告诉你AI的应用究竟对人类社会经济有哪些影响...
- “弃用 iOS 后,我的那些 Android 替代方案!”
- oracle DML错误日志(笔记)
- netcore之判断系统
- 基于quartz的云调度中心实现
- linux系统root用户忘记密码的重置方法
- pytorch to_device遇到数据迁移不成功的问题
- android webview 播放视频总结,Android WebView 播放视频总结~
- 计算机网络—网络安全
- 18V转12V的芯片,PW2312的BOM和DEMO文件
- 区域经济发展的扬州创新:融合工业化与信息化
热门文章
- ArcGIS全流程从无到有制作一张全国人口专题图(以七普数据为例)
- 博客介绍——warrent
- Unbuntu查看系统版本信息
- windows10 No module named ‘win32con‘ 亲测解决
- matlab 自带的地图toolbox总结2
- 一天一道ctf 第25天(md5强碰撞)
- 【Linux系统】Linux的系统目录结构
- 松下服务器型号,WEA-ASC970/CH 松下综合型系统管理服务器
- python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...
- python中同级目录下不同py文件之间的调用失败问题