车载基础软件——AUTOSAR CP关键技术分析
我是穿拖鞋的汉子,魔都中坚持长期主义的一个屌丝工程师!今天是2023年2月6日,上海还在下着雨,虽说是春雨贵如油,但是潮湿的氛围还是让心中有了潮湿的心情!
老规矩,分享一段喜欢的文字,避免成为高知识低文化的工科男:
“
自己要马不停蹄的姿态去迎接未来,带着对远方的期待前行,不顾骄阳灼烧,不惧风雨癫狂。或许自己会错过今天的日落,但是自己可以早起去追逐下一个黎明!
”
Return to today's topic!
在做功能实现AUTOSAR Solution方案中(CP),有着许多关键技术应用到日常工作中,也解决了车载软件的一些痛点问题。如本文分享的关键技术:
-> 基础软件多核分配
-> 软件集群技术
一、基础软件多核分配
基础软件多核分配是发挥多核系统并行计算、负载均衡、快速响应优势的关键技术(这其中原因归结于车规级芯片性能越发强大)。没有基础软件的多核分配,就算应用软件做了多核分配,多核系统的优势将受到核间通信效率的制约,甚至系统整体性能还不如单核。实现基础软件多核分配的主要技术手段有两种:
主卫星方式(Master/Satellites);
通信协议栈分割(Com-Stack Split)。
1、主卫星方式。
如下图主卫星方式的基础软件分割所示,该方式可适用于 Dem、FiM、WdgM、Com、NvM、XCP、EcuM 等基础软件组件。当这些组件提供的服务需要被多个核使用时可以考虑主卫星方式,即卫星给其所在核的其他模块提供服务接口并将收到的服务请求通过主卫星通信传递给主星,主星协调、过滤和接收各卫星的服务请求并进行处理,最后将处理结果通过主卫星通信反馈给卫星。由于主卫星之间的工作分配 AUTOSAR CP 并未标准化,所以用户可自定义。一种极端情况是主星具备全部功能,卫星仅为同核其他模块提供服务接口并将服务请求转发到主星上处理;另一种极端情况是卫星和主星一样具备全部功能并不需要主星处理服务请求,它只需要与主星保持必要信息的同步。
由于卫星提供的接口可以被该核的其他模块直接调用并通过高效的主卫星通信与主星交互,从而避免了低效的 Client/Server 通信,大大提高了多核系统中基础软件的服务效率。另外由于主卫星可并行处理服务请求,因此 CPU 负载可以被有效平衡、基础软件的服务速度也得到提高。
2、通信协议栈分割方式。
该方式通过一个增强型的 PduR 引入 FIFO 队列(无需自旋锁)或 Buffer(需要配合自旋锁)这样的数据结构对跨核 PDU 进行路由,可将不同类型的总线协议栈分配到不同的核,如将 CAN 协议栈和以太网协议栈分配到不同的核。通过这样的协议栈分割可达到 CPU 负载均衡及提升多核系统实时性的目的。
二、软件集群技术
软件集群(Software Cluster)在 R20-11 版本中被首次提出,是 AUTOSAR CP 在软件架构方面的一次创新,其本质是利用二进制接口技术实现更为灵活的软件集成与更新。
软件集群技术示例所示,通过软件集群技术 AUTOSAR CP 软件架构被分割成了两个独立的软件集群,分别为应用软件集群(Applicative Software Cluster)和主软件集群(Host SoftwareCluster)两部分。其中应用软件集群可以单独编译,其搭载一组关联度较高的 SWC;主软件集群也可以单独编译,其除了可以搭载 SWC 之外还必须搭载基础软件(包含 OS 和 MCAL)。
一个控制器中可以存在多个高度解耦的应用软件集群,但是只能且必须存在一个主软件集群,分别将应用软件集群和主软件集群烧写至目标板后即可形成完整的、可执行的程序。这样的软件架构创新使得软件的开发与集成变得更加灵活,尤其是当需要更新软件功能时,无需更新全部软件,只要更新特定的软件集群即可。
如下图软件集群技术示例中的蓝框所示,各个软件集群就像是控制器上的一块块拼图,而这些拼图之间是通过软件集群连接块(Software Cluster Connection)拼接起来的。软件集群连接块由三部分组成,分别是二进制清单(Binary Manifest),跨软件集群通信(Cross Cluster Communication),代理模块(Proxy Modules)。
这其中最关键的是二进制清单,它在编译阶段产生且 AUTOSAR CP 规定了其标准格式,它为各个软件集群编译后文件(Binary Objects)之间提供了定义良好的接口,从而能将其连接在一起形成完整的可执行文件。
下图软件集群的连接展示了二进制清单连接两个软件簇的例子,其中软件集群 A 运行时需要一个资源(Require Resource,指软件集群运行时所需要的一切,或是 S/R接口,或是 NV 块),而这个资源正好可以由软件集群 B 提供(Provide Resource)。软件集群 A/B 的二进制清单中都分别存储了这个资源的基本信息包括:资源属性(Require/Provide)、资源类型(S/R、NV 块等)、资源 ID、句柄一览表(Handle,即用于访问该资源的信息如数据指针、函数指针、数据等)等。对于软件集群 A 来说,因为在其单独编译阶段没有相应的 Provide Resource,所以其二进制清单的句柄一览表被默认值填写且是可修改的。
如下图黄色框所示。对于软件集群 B 来说,因为其具备固定的Provide Resource,所以其二进制清单的句柄一览表在编译时已确定且是不可修改的,如下图绿色框所示。如果在烧写时进行软件集群连接,那么目标板内的软件集群连接器软件(On-board Software Cluster Connector)负责在烧写的同时,将软件集群 B 中资源的句柄拷贝至软件集群 A 中资源的句柄,从而完成两个软件集群的连接。
跨软件集群通信用于支撑 VFB 通信。而代理模块分为高代理模块(High Proxy Modules)和低代理模块(Low Proxy Modules)两部分,其中高代理模块位于应用软件集群代替原先的基础软件模块提供符合 AUTOSAR 标准的接口,低代理模块位于主软件集群负责实现真正的基础软件模块功能,二者之间通过二进制清单连接
搁笔分享完毕。
愿你我相信时间的力量,
做一个长期主义者!
页:
[1]