Autosar - 【3 SWC】

SWC(Software Component)是AUTOSAR的核心概念之一,它是一个功能独立的软件单元,可以在不同的ECU(Electronic Control Unit)上运行。SWC由AUTOSAR描述文件(ARXML)定义,并通过AUTOSAR的代码生成工具生成代码。SWC的核心功能是通过输入和输出端口与其他SWC或底层软件组件(BSW)交互,同时也可以使用内部端口进行内部通信。

3.1 SWC概述

AutoSAR主要分为3个层级:应用软件层(AppL),实时运行环境(RTE)和基础软件层(BSW)。APPL由多个SWC组成,在此,每个SWC可以理解为一个.c文件,而整个应用软件层便是一个文件夹。如下图所示:

上图可以看出,整个工程是一个AutoSAR架构,其中的AppL、RTE和BSW分别对应一个文件夹,而SWC组件就是一个个的.c文件(和.h)。

AppL中最重要的是SWC,而SWC与其他SWC通信需要接口, SWC中又由Runnable组成,所以AppL主要的组成就分下面三部分:

  • 应用软件组件(Application SWC)
  • AutoSAR接口(Ports)
  • 可运行实体(Runnable)

3.1.1 应用软件组件(SWC)

  1. 原子SWC(Atomic SWC)

不可再拆分的SWC,特点是每个原子级SWC对应一个.c文件,且这个c文件就是的最小单元,不可再分。可运行实体(runnable)是组成SWC的更小单元,即将SWC看成是最小单元,runnable是其中的函数。

  1. 集合SWC(Composition SWC)

AutoSAR还规定了一类集合级的SWC(Composition SWC)。它们可以分为一个个更小的Atomic SWC。通常,可以将功能相近或者需要整合到一处方便观看的SWC利用一个compositon SWC包含起来。如上图中的“车顶灯ECU”。

SWC最形象的对比就是一个.C文件了,那么Composition SWC顾名思义就是.C文件的集合,体现在代码上,就是保存.C文件的文件夹。

  1. 特殊SWC

实际上,需要添加代码的不止是应用层的SWC。在BSW中,IO硬件抽象层(IoHwAb,和复杂驱动(Cdd)都是需要手动添加代码的,而这两个地方也可以算作是SWC,在DaVinci Developer中可以作为SWC进行配置和加runnable等操作的。因此,可将其看作是特殊的SWC。

 3.1.2 AutoSAR(Port)

Port是依附在SWC上的概念,比如配置工具配置SWC后,需要配置这个SWC的Port。

  1. 其实也好理解,如果一个.C文件孤零零的放在那里,与别的C文件没有任何数据交互,那么作为一套代码中的一个C文件,根本没法发挥作用,所以必然在SWC上需要配置上或者输入(R-Port)的或者输出(P-Port)的Port。

但是如果只是Port这个概念的话,实在是太难以理解了,但是如果顺着SWC等于C文件这个思路考虑的话,当C文件之间进行数据交互会是用什么方式呢?

  1. 那么最简单的方法就是“全局变量”。实际上,在配置好的代码中,可以发现,如果我为SWC1和SWC2之间配置了一个SR的interface的话,SWC1中会有一个函数Rte_Write(),里面会对一个全局变量进行赋值。而另一边SWC2的里面会有一个Rte_Read()的函数,来读取这个全局变量。通过这种方式,达到了数据的交互。

Ports是SWC和SWC做接口(Interface)通信使用,或是SWC通过RTE和BSW做接口(Interface)通信使用,Ports主要分为5种类型。

  1. Send/Receiver(S/R)接口

作用:传输数据。通过RTE传输数据,并且通过RTE管理数据的传输,避免数据出问题(例如同时调用同一数据时可能出错)。

例子

Receiver接口类型:Rte_Read_<Port>_<Data Element>()

  1. Client/Server(C/S)接口

作用: 提供操作。就是Server提供函数供Client调用

  1. 可以同步和异步。同步就是直接调用,相当于函数直接插入上下文运行;异步的话需要等待,相当于让函数在另一个线程中运行,运行完了再返回,原上下文依然运行;
  2. 一个接口可以提供多个操作,就是一个接口可以包含很多函数;
  3. ECU内部和跨ECU都可以调用,跨ECU也是通过外部总线。

例子

Client接口类型:Rte_Call_<Port>_<Function>()

3.1.3 可运行实体(Runnable)

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之间有效地进行通信。

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大魔王库巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值