AUTOSAR 软件组件介绍

在AUTOSAR中,应用软件是由一系列相互交互的软件组件构成的。在基于AUTOSAR的应用软件开发过程中,软件组件是整个应用软件的基础,其他软件开发工作如配置、映射等,都是围绕软件组件展开的。本小节重点介绍AUTOSAR中软件组件的相关概念。

软件组件(Software Component,SWC)是AUTOSAR中的一个重要概念。软件组件是封装了部分或者全部汽车电子功能的模块。软件组件包括了其具体的功能实现以及与对应的描述。各个软件组件通过虚拟功能总线进行交互,从而形成一个AUTOSAR应用软件。

虚拟功能总线(Virtual Function Bus,VFB)是AUTOSAR中的另一个重要概念。虚拟功能总线是对AUTOSAR提供的所有通信机制的一种抽象,是所有软件组件进行交互的桥梁。通过虚拟功能总线,软件组件之间的通讯细节被抽象出来,软件组件通过AUTOSAR定义的接口对通讯进行描述,即可最大程度地独立于具体的通讯机制,实现与其他软件组件和硬件的交互。通过虚拟功能总线,无论软件组件使用的是单ECU的内部通信还是ECU间的外部通信,对于应用软件的设计者来说没有本质区别。内部通信与外部通信的区别只有等到系统配置阶段,将软件组件分配到不同的ECU之后,才能体现出来。而在这种情况下,虚拟功能总线的真实通信实现可以由运行时环境和基础软件来保证。因此,在虚拟功能总线的帮助下,应用软件的各个软件组件不需要关注通信的区别,从而可以在独立的情况下设计开发软件组件,使得应用软件的开发可以独立于具体的ECU,使得开发人员将精力集中在应用软件及其软件组件的开发上。

一个应用软件是由多个相互交互的软件组件构成的,而各个软件组件之间的交互是由虚拟功能总线提供的通信机制来保证的。软件组件通过端口(Port)来进行不同软件组件间或者软件组件与硬件间的通讯或者交互。每个软件组件都需要定义端口。端口代表了软件组件间通信内容及其方向,分为两类,一类是供型端口(P-Port),一类是需型端口(R-Port)。供型端口用于对外提供某种数据或者某类操作,需型端口用于从其他软件组件获得所需数据或者所请求的操作。将一个软件组件的供型端口与另外一个软件组件的需型端口进行连接,即实现了两个软件组件直接的通信,如图 1 所示。


图1 基于VFB的软件组件通信

每个端口虽然定义了软件组件间通信内容及其方向,但是通信内容以及用于交互的操作却仍不得而知。AUTOSAR中使用端口接口(Port-Interface)来描述端口之间的供需关系。端口接口有3种,分别为发送者/接收者接口(Sender-Receiver Interface,S-R)、客户端/服务器接口(Client-Server Interface,C-S)和标定接口(Calibration Interface),如表 1所示。

端口接口类型 描述
发送者/接收者 发送者发送消息到一个或多个接收者
发送者/接收者 服务器是操作的提供者,多个客户端可以调用这些操作
标定 标定是一种静态的通信方式,它允许模块访问静态标定参数

发送者/接收者接口定义了一系列的数据元素用于在虚拟功能总线上进行接收和发送,如图 1的ISignalPeriod所示,该接口定义了一个命名为duration,类型为无符号16位整数的数据元素。

客户端/服务器接口定义了一系列的操作,这些由包含该接口的供型端口所在的软件组件来实现,并提供给包含该接口的需型端口所在的软件组件调用,如图 1的ILeverPos所示,该接口定义了一个命名为getAngle,有一个输出类型(即值可以被函数修改)的有符号12位整数参数的操作。参数的名字不影响接口的含义。

每个端口只能定义其中一种接口类型,具有相同端口接口类型或者兼容接口类型的端口才可以进行通讯。

以上介绍了软件组件的对外表现形式,即一系列的端口以及与之对应的端口接口类型。下面介绍软件组件的内部行为。

软件组件的功能是通过运行实体(Runable Entity)来表现的。软件组件被分成若干个可执行程序单元,即运行实体。运行实体软件是组件中的一组指令序列,一个或者多个运行实体实现了其所在软件组件对外提供的功能。每个运行实体都与一个特定的RTE事件(RTEEvent)绑定。当绑定的事件发生时,对应的运行实体就会被触发。在AUTOSAR操作系统中,运行实体将会运行在操作系统的任务的上下文中。任务需要给运行实体提供必需的资源,例如栈空间等。运行实体通过访问端口的数据或者操作来完成自身的功能,并把数据处理的结果或者提供的操作通过端口对外提供。因为端口上的通信机制是由虚拟功能总线进行抽象过的,因此运行实体的实现中,涉及到访问端口数据或操作的时候,需要使用RTE提供的API来进行访问。这样,使得运行实体的实现是与平台无关的,从而软件组件也是与平台无关的,进而增强了软件组件的移植性和可重用性。运行实体可以通过建模工具进行建模设计并自动生成代码,也可以手工编写代码。

如前所述,每个软件组件必须提供其代码的具体实现以及描述文件。代码实现即运行实体的实现,以C源文件或者目标文件的方式提供。而描述文件必须描述软件组件的属性,包括所使用的端口、端口接口、运行实体、以及运行实体所对应的RTE事件等,以XML(eXtensible Markup Language)文件形式提供。

综上所述,在AUTOSAR中的软件组件可以使用如图 2 所示的示例图来表示。


图2 AUTOSAR软件组件示例

根据应用目的的不同,组件可分为7种类型。如表2所示。软件组件不允许绕过RTE直接访问下层基础软件提供的服务,因此服务、ECU抽象和复杂驱动被抽象成一个同样有端口的软件组件,通过服务连接器与应用层的软件组件组合成ECU组合组件。BSW中的组件都具有标准化的AUTOSAR接口。

种类 描述
应用软件组件 应用软件组件是一个原子软件组件,它实现部分或者一个应用。原子软件组件可以使用所有符合AUTOSAR的通讯机制和服务。应用软件组件通过传感器/执行器软件组件与传感器或执行器交互。
传感器/执行器软件组件 传感器/执行器软件组件是一个来处理具体的一个传感器和(或)执行器的原子软件组件,它直接与ECU抽象层交互。
标定参数组件 标定参数组件提供标定参数值。
组合 组合包含了原子软件组件和组合,因此它可以使用所有符合AUTOSAR的通讯机制和服务。
服务组件 服务组件通过AUTOSAR标准化的接口提供服务,主要处于基础软件层。
ECU抽象组件 ECU抽象层提供访问ECU具体的IO的能力。该层次仅使用C-S接口的供型端口,并且由传感器/执行器软件组件所使用的。ECU抽象层也可直接与其他一些基础软件交互。
复杂设备驱动组件 复杂设备驱动组件推广了ECU抽象组件。它可以定义端口,通过特定方式与其他软件组件交互,也可以直接与硬件交互,是灵活性最强但可移植性最差的组件。

你可能感兴趣的:(内容描述)