汽车AUTOSAR分层架构设计与功能设计总结
1 引文
2003年,全球汽车制造商、零部件供应商及其它电子电子、半导体和软件系统公司联合建立了 AUTOSAR(Automotive Open System Architecture)汽车开发系统架构联盟,并联合推出一个开放化、标准化的汽车软件架构AUTOSAR规范。AUTOSAR的架构使用分层设计,高度抽象了汽车软件功能接口,大大降低了汽车软件系统的软硬件耦合度。
2 AUTOSAR分层架构
分层架构是实现软硬件分离的关键,通过各个层次的抽象实现,摆脱了以往ECU软件嵌入式开发时对硬件的依赖。
2.1 基础软件层
基础软件层BSW(Basic Software Layer)包括: 服务层,ECU抽象层,微控制器抽象层和复杂驱动。
2.1.1 基础软件组件构成
- 服务层:
包括系统服务,存储器服务,通信服务。提供网络通信管理,存储管理,ECU模式管理和实时操作系统(RTOS)等服务。
-
ECU抽象层:
包括板载设备抽象,存储器硬件抽象,通信硬件抽象和I/O硬件抽象。该层将ECU结构进行了抽象, 负责提供统一的访问接口,实现对通信、存储器或者I/O
的访问, 从而不需要考虑这些资源是由微控制器片内提供的, 还是由微控制器片外设备提供的。 -
微控制器抽象层:
包括微控制器驱动,存储器驱动,通信驱动,I/O驱动。通过微控制器抽象层可将硬件封装起来,避免上层软件直接对微控制器的寄存器进行操作。
-
复杂驱动:
由于对复杂传感器和执行器进行操作的模块涉及严格的时序问题,难以抽象, 所以在AUTOSAR规范中这部分没有被标准化 。
2.2 运行时环境
运行时环境RTE(Runtime Environment)封装了基础软件层的通信和服务, 为应用层软件组件提供了标准化的基础软件和通信接口, 使得应用层可以通过RTE接口函数调用基础软件的服务。 此外, RTE抽象了ECU之间的通信, 即RTE通过使用标准化的接口将其统一为软件组件之间的通信。 由于RTE的实现与具体ECU相关, 所以必须为每个ECU分别实现。
2.3 应用软件层
应用软件层ASW(Application Software Layer)包含若干个软件组件SWC(Software Component), 软件组件间通过端口(Port) 进行交互。每个软件组件可以包含一个或者多个运行实体RE(Runnable Entity), 运行实体中封装了相关控制算法, 其可由RTE事件(RTE Event) 触发。
3 AUTOSAR软件组件
软件组件:分为原子软件组件(Automic SWC)和部件(Composition SWC)
部件:也可以由多个原子软件组件或多个部件构成。
原子软件组件的类型:
- 应用软件组件(Application SWC): 主要用于实现应用层控制算法
- 传感器/执行器软件组件(Sensor/Actuator SWC): 处理具体的传感器/执行器信号,可以直接与ECU抽象层交互
- 标定参数软件组件(Parameter SWC): 主要提供标定参数值
- ECU抽象软件组件(ECU Abstraction SWC): 提供访问ECU具体I/O的能力
- 复杂设备驱动软件组件(Complex Device Driver SWC):可以定义端口与其他软件组件通信,也可以与ECU硬件直接交互,灵活性强,可移植性差
- 服务软件组件(Service SWC):主要用于基础软件层,可通过标准的AUTOSAR接口与其他软件组件进行交互
3.1 软件组件的数据类型
- 应用数据类型ADT(Application Data Type):软件组件设计阶段抽象出的数据类型,一种功能上的定义,并不生成实际代码
- 实现数据类型IDT(Implementation Data Type):代码级的数据类型,应用数据类型的具体实现;需要引用基础数据类型(配置计算方法和限制条件)
- 基础数据类型(Base Type)
AUTOSAR中,可以不使用ADT直接使用IDT;但是如果使用了ADT,则必须进行数据类型映射到IDT,从而对每个ADT进行具体实现。
3.2 软件组件的端口与端口接口
端口:
- 需型端口(Require Port,RPort):用于从其他软件组件获得所需数据或者所请求的操作
- 供型端口(Provide Port,PPort):用于对外提供某种数据或者某类操作
- 供需端口(Provide and Require Port,PRPort):兼有需型端口与供型端口的特性
端口接口:
-
发送者-接收者接口(Sender-Receiver Interface,S/R):发送者(供型端口)接收者(需型端口)
S/R用于数据的传递,发送者发送数据到一个或者多个接收者。比如SR_Interface:uint8 DE_1, uint16 DE_2…
一个软件组件的供型、需型、供需型端口可以引用同一个SR_Interface,并任意选择其中一个或者多个DE(Data Element)。
-
客户端-服务器接口(Client-Server Interface,C/S): 客户端(需型端口)服务器(供型端口)
C/S用于函数调用操作(Operation,OP),由引用该接口的供型端口所在组件实现,提供给引用该接口的需型端口所在组件调用。
每个端口只能引用一种接口类型,并且引用相同接口类型的端口才可以进行交互。比如CS_Interface:OP_1, OP_2…
OP_1: uint8 arg1 (In) OP_2: uint8 arg2 (Out)
-
模式转换接口(Mode Switch Interface)
-
非易失性数据接口(Non-volatile Data Interface)
-
参数接口(Parameter Interface)
-
触发接口(Trigger Interface)
3.3 软件组件的内部行为
-
运行实体(Runnable Entity,RE):封装了一些算法的可执行代码;一个软件组件可包含一个RE或者多个RE
-
运行实体的RTE事件(RTE Event):引发实体运行的Event,Event类型包括周期性事件、数据接收事件、客户端调用服务器事件等
-
运行实体与所属软件组件的端口访问(Port Access)
运行实体与所属软件组件的端口访问(Port Access) 是和端口所引用的端口接口类型密切相关的 :
S/R通信模式分为:显式模式和隐式模式
-
显式模式:数据读写具有即时性
-
隐式模式:先读数据入缓存,然后运行实体,最后写数据
C/S通信模式分为:同步模式与异步模式
-
-
运行实体间变量(Inter Runnable Variable, IRV): 两个运行实体间交互的变量
4 AUTOSAR虚拟功能总线
虚拟功能总线VFB(Virtual Function Bus)可以使得负责应用层软件的开发人员不用去关心一个软件组件最终在整车中的哪个ECU中具体实现, 即使得应用软件的开发可以独立于具体的ECU开发。 从而, 可以让应用软件开发人员专注于应用软件组件的开发。
通过VFB,无论软件组件使用的是在ECU内部的通信还是在ECU之间的通信, 对于应用软件的开发者而言, 没有本质区别。内部通信与外部通信的区别只有等到
系统级设计与配置阶段, 将软件组件分配到不同的ECU之后才会体现出来。 最终, VFB的真实通信实现可以由RTE和基础软件来保证。通过对通信机制的抽象, 可以使得当一个系统的软件组件之间的通信关系确定之后, 通过VFB就可以在开发前期将它们虚拟集成完成系统仿真与测试工作。
5 AUTOSAR方法论
车用控制器软件开发:系统级,ECU级,软件组件级
- 系统级开发:涉及系统功能需求、硬件资源、系统约束、系统架构
- ECU级开发:根据ECU抽象后的信息进行配置
- 软件组件级开发:软件设计过程中,几乎都涉及到组件级开发
通信接口使用统一的arxml(AUTOSAR Extensible Markup Language)描述文件,来构建AUTOSAR软件开发方法论。在开发之前,需要编写系统配置输入描述文件,包括:
-
软件组件描述(SW-Component Description)
包含系统中所涉及的软件组件的接口信息, 例如数据类型、 端口接口、 端口等。
-
ECU资源描述(ECU Resource Description-HW only)
包含系统中每个ECU所需要的处理器及其外设、 传感器、 执行器等信息。
-
系统约束描述(System Constraint Description)
包含总线信号、 软件组件间的拓扑结构和一些映射关系等信息。
基于上述系统配置输入描述文件, 系统配置根据ECU资源和时序要求, 将软件组件映射到对应的ECU上, 生成系统配置描述文件(System Configuration Description) 。 系统配置描述文件中包含了设计过程中非常重要的一个描述-系统通信矩阵, 其描述了网络中所有运行的数据帧及其对应的时序和内容。
从系统级到ECU级的过渡操作是指ECU信息抽取(ECU Extract) 。在系统配置阶段已经将每个ECU所包含的所有软件组件、 网络通信等信息封装好, ECU信息抽取阶段只需将待配置ECU信息抽取出来即可, 服务于之后的ECU配置。
ECU配置过程主要是对RTE和BSW的配置。 在RTE配置阶段, 需要将软件组件的运行实体映射到相应的操作系统任务; 在BSW配置阶段,需要详细配置BSW层中所需要用到的模块, 一般有操作系统、 通信服务、 ECU抽象层和微控制器抽象层等。 依据ECU配置信息生成BSW和RTE代码, 再结合软件组件级实现的应用代码, 最终进行代码集成, 编译链接, 生成单片机可执行文件。
6 AUTOSAR应用接口
不同模块间的通信接口分为:
-
AUTOSAR接口(AUTOSAR Interface)
属于应用接口, 是从软件组件的端口衍生来的通用接口, 描述数据或者服务。 它由RTE提供给软件组件, 可以作为软件组件间通信的接口, 也可以作为软件组件与I/O硬件抽象层或复杂设备驱动层间的接口。
-
标准AUTOSAR接口(Standardized AUTOSAR Interface)
特殊的AUTOSAR接口,由RTE向软件组件提供BSW中的服务, 如存储器管理、 ECU状态管理、 “看门狗”管理等。
-
标准接口(Standardized Interface)
主要用于ECU上的BSW各模块间、 RTE和操作系统间、 RTE和通信模块间, 应用软件组件不可访问。
