SWC(Software Component)是AUTOSAR的核心概念之一,它是一个功能独立的软件单元,可以在不同的ECU(Electronic Control Unit)上运行。SWC由AUTOSAR描述文件(ARXML)定义,并通过AUTOSAR的代码生成工具生成代码。SWC的核心功能是通过输入和输出端口与其他SWC或底层软件组件(BSW)交互,同时也可以使用内部端口进行内部通信。
AutoSAR主要分为3个层级:应用软件层(AppL),实时运行环境(RTE)和基础软件层(BSW)。APPL由多个SWC组成,在此,每个SWC可以理解为一个.c文件,而整个应用软件层便是一个文件夹。如下图所示:
上图可以看出,整个工程是一个AutoSAR架构,其中的AppL、RTE和BSW分别对应一个文件夹,而SWC组件就是一个个的.c文件(和.h)。
AppL中最重要的是SWC,而SWC与其他SWC通信需要接口, SWC中又由Runnable组成,所以AppL主要的组成就分下面三部分:
不可再拆分的SWC,特点是每个原子级SWC对应一个.c文件,且这个c文件就是的最小单元,不可再分。可运行实体(runnable)是组成SWC的更小单元,即将SWC看成是最小单元,runnable是其中的函数。
AutoSAR还规定了一类集合级的SWC(Composition SWC)。它们可以分为一个个更小的Atomic SWC。通常,可以将功能相近或者需要整合到一处方便观看的SWC利用一个compositon SWC包含起来。如上图中的“车顶灯ECU”。
SWC最形象的对比就是一个.C文件了,那么Composition SWC顾名思义就是.C文件的集合,体现在代码上,就是保存.C文件的文件夹。
实际上,需要添加代码的不止是应用层的SWC。在BSW中,IO硬件抽象层(IoHwAb,和复杂驱动(Cdd)都是需要手动添加代码的,而这两个地方也可以算作是SWC,在DaVinci Developer中可以作为SWC进行配置和加runnable等操作的。因此,可将其看作是特殊的SWC。
Port是依附在SWC上的概念,比如配置工具配置SWC后,需要配置这个SWC的Port。
但是如果只是Port这个概念的话,实在是太难以理解了,但是如果顺着SWC等于C文件这个思路考虑的话,当C文件之间进行数据交互会是用什么方式呢?
Ports是SWC和SWC做接口(Interface)通信使用,或是SWC通过RTE和BSW做接口(Interface)通信使用,Ports主要分为5种类型。
作用:传输数据。通过RTE传输数据,并且通过RTE管理数据的传输,避免数据出问题(例如同时调用同一数据时可能出错)。
例子:
Receiver接口类型:Rte_Read_
作用: 提供操作。就是Server提供函数供Client调用
例子:
Client接口类型:Rte_Call_
AUTOSAR 当中,一个运行实体(Runnable)是指一个原子软件组件(AUTOSAR Atomic Software Component)提供的最小代码段,同时也是一个可以被单独调度的任务。
Runnables,即Runnable entities,也是SWC的组成部分,运行在RTE里面,由RTE周期事件触发或者其他事件触发时调用。Runnable包含着实际运行的函数。
注:Runnable是需要OS中的Task做载体。
AUTOSAR SWC还包含必须在运行时调用的函数。这些C函数在AUTOSAR中称为Runnables。
Runnables不能由它们自己执行;它们必须分配给 OS的可执行实体。可以通过将Runnables的函数调用插入OS任务主体来执行此类分配。
然后,Runnables在调用方OS-Task的上下文中循环执行和/或事件驱动。Runnables对任务的分配是根据图1和图2执行的。
图1:AUTOSAR分层软件架构-Runnables的映射
图2显示了对图1中关系的解释。根据此图,AUTOSAR SWC中的Runnables被分配给 OS任务。
图2:SWC到 OS-Applications的映射
AUTOSAR OS-Applications是 OS对象(如Task、ISR、调度表、计数器和警报)的集合,它们构成了一个内聚的功能单元。属于同一 OS-Applications的所有对象都可以相互访问。
OS-Applications中的 OS对象可能属于不同的AUTOSAR SWC。RTE实现了一个内存区域, OS-Applications的所有成员都可以不受限制地访问该区域,以方便SWC之间有效地进行通信。