目录
1 AutoSAR架构分层
1.1 ASW
1.2 RTE
1.3 BSW
1.3.1 服务层
1.3.2 ECU抽象层
1.3.3 微控制器抽象层
1.3.4 复杂驱动层
2 AutoSAR软件组件
2.1组件分类
2.2 组件的数据类型
2.2.1 应用数据类型(Application Data Type,ADT)
2.2.2 实现数据类型(Implementation Data Type,IDT)
2.2.3 基础数据类型(Base Type)
2.3 组件的端口与端口接口
2.3.1 S-R接口
2.3.2 C-S接口
2.4 软件组件的内部行为
2.4.1 运行实体(Runnable Entity,RE)
2.4.2 运行实体的RTE事件(RTE Event)
2.4.3 运行实体与所属软件组件的端口访问(Port Access)
2.4.4 运行实体间变量(Inter Runnable Variable,IRV)。
AUTOSAR规范主要包括分层架构、方法论和应用接口三部分内容。其中,分层架构是实现软硬件分离的关键,使汽车系统软件开发者摆脱了之前ECU软件开发与验证时对硬件系统的依赖。
在AUTOSAR分层架构中,汽车嵌入式系统软件自上而下分别为:
应用软件层(Application Software Layer,ASW)
运行时环境 (Runtime Environment,RTE)
基础软件层(Basic Software Layer, BSW)
微控制器(Microcontroller)
为保证上层与下层的独立性,通常情况下,每一层只能使用下一层所提供的接口,并向上一层提供相应的接口。
应用软件层(Application Software Layer,ASW)包含若干个软件组件(Software Component,SWC),软件组件间通过端口(Port)进行交互。每个软件组件包含一个或者多个运行实体(Runnable Entity,RE),运行实体中封装了相关控制算法,其可由 RTE事件(RTE Event)触发。
运行时环境(Runtime Environment,RTE)作为应用软件层与基础软件层交互的桥梁,为软硬件分离提供了可能。
RTE可以实现软件组件间、基础软件间以及软件组件与基础软件之间的通信。
RTE封装了基础软件层的通信和服务,为应用层软件组件提供了标准化的基础软件和通信接口,使得应用层可以通过RTE接口函数调用基础软件的服务。
RTE抽象了ECU之间的通信,即RTE通过使用标准化的接口将其统一为软件组件之间的通信。由于RTE的实现与具体ECU相关,所以必须为每个ECU分别实现。
基础软件层(Basic Software Layer,BSW)又可分为四层:
服务层(Services Layer)
ECU抽象层(ECU Abstraction Layer)
微控制器抽象层(Microcontroller Abstraction Layer,MCAL)
复杂驱动 (Complex Drivers)
服务层(Services Layer)可分为系统服务(System Services)、存储器服务 (Memory Services)以及通信服务(Communication Services)三大部分。提供包括网络通信管理、存储管理、ECU模式管理和实时操作系统 (Real Time Operating System,RTOS)等服务。除了操作系统外,服务层的软件模块都是与ECU平台无关的。
ECU抽象层(ECU Abstraction Layer)包括板载设备抽象 (Onboard Devices Abstraction)、存储器硬件抽象 (Memory Hardware Abstraction)、通信硬件抽象 (Communication Hardware Abstraction)和I/O硬件抽象 (Input/Output Hardware Abstraction)。
该层将ECU结构进行了抽象,负责提供统一的访问接口,该层与ECU平台相关,但与微控制器无关。
微控制器抽象层(Microcontroller Abstraction Layer,MCAL)是实现不同硬件接口统一化的特殊层。微控制器抽象层包括微控制器驱动(Microcontroller Drivers)、存储器驱动 (Memory Drivers)、通信驱动(Communication Drivers)以及I/O驱动 (I/O Drivers)
由于对复杂传感器和执行器进行操作的模块涉及严格的时序问题, 难以抽象,所以在AUTOSAR规范中这部分没有被标准化,统称为复杂驱动(Complex Drivers)
软件组件(SWC)是应用层的核心,也是一些抽象层、复杂驱动层等实现的载体。
AutoSAR软件组件大体上可分为原子软件组件(Atomic SWC)和部件(Composition SWC)。部件可以包含若干原子软件组件或部件。原子软件组件分为以下几种类型:
应用软件组件(Application SWC):主要用于实现应用层控制算法
传感器/执行器软件组件(Sensor/Actuator SWC):处理具体传感器/执行器的信号,可以直接与ECU抽象层交互。
标定参数软件组件(Parameter SWC):提供标定参数值
ECU抽象软件组件(ECU Abstraction SWC):提供访问ECU具体I/O 的能力
复杂设备驱动软件组件(Complex Device Driver SWC):推广了ECU 抽象软件组件,它可以定义端口与其他软件组件通信,还可以与ECU硬 件直接交互。
服务软件组件(Service SWC):主要用于基础软件层,可通过标准接口或标准AUTOSAR接口与其他类型的软件组件进行交互
软件组件设计时,抽象出来的数据类型,仅仅是功能的定义,不会生成实际的代码。用户可以直接使用Implementation Data Type,若使用 Application Data Type,则必须进行数据类型映射(Data Type Mapping),即将Application Data Type与 Implementation Data Type进行映射,从而来对每个Application Data Type 进行具体实现。
是代码级别的数据类型,实惠应用数据类型的具体实现,而且需要应用基础数据类型,同时增加一些计算方法等。
基础数据类型就不多说了,常见的int/float等等
软件组件的端口根据输入/输出方向可分为:
需型端口(Require Port,RPort):用于从其他软件组件获得所需数据或者所请求的操 作
供型端口(Provide Port,PPort):用于对外提供某种数据或者某类操作
供需端口(Provide and Require Port, PRPort):兼有需型端口与供型端口的特性
需型端口可以和供型端口连接。软件组件SWC1有一个需型端口(R)和一个供型端口(P),其中需型端口与SWC2的供型端口相连,它们之间的交互关系通过连线箭头表示,由SWC2的供型端口指向SWC1的需型端口。SWC3具有一个供需端口,被认为自我相连。
由于端口仅仅定义了方向,所以AUTOSAR中用端口接口 (Port Interface)来表征端口的属性,端口接口主要有如下几种类型:
发送者-接收者接口(Sender-Receiver Interface,S/R);
客户端-服务器接口(Client-Server Interface,C/S);
模式转换接口(Mode Switch Interface);
非易失性数据接口(Non-volatile Data Interface);
参数接口(Parameter Interface);
触发接口(Trigger Interface)。
如上图:软件组件SWC1具有两个端口,其中一个引用的端口接口类型为发送者-接收者(S/R)接口,另一个引用的端口接口类型为客户端-服务器(C/S)接口。从中也可以看出,对于引用发送者-接收者接口的一组端口而言,需型端口为接收者 (Receiver),供型端口为发送者(Sender)。对于引用客户端-服务器 接口的一组端口而言,需型端口为客户(Client),供型端口为服务器(Server)。
发送者-接收者接口用于数据的传递关系,发送者发送数据到一个或多个接收者。该类型接口中定义了一系列的数据元素(Data Element,DE),这些数据元素之间是相互独立的。如下图所示,该发送者-接收者接口SR_Interface中定义了两个数据元素,名字分别为DE_1与DE_2,并且需要为每个数据元素赋予相应的数据类型。
客户端-服务器接口用于操作(Operation,OP),即函数调用关系,服务器是操作的提供者,多个客户端可以调用同一个操作,但同一个客户端不能调用多个操作。客户端-服务器接口定义了一系列操作 (Operation),即函数,它(们)由引用该接口的供型端口所在的软件组(服务器)件来实现,并提供给引用该接口的需型端口所在的软件组件调用。如下图所示,该客户端-服务器接口CS_Interface中定义了两个操作OP_1 与OP_2,对于每一个操作需要定义相关参数及其方向,即函数的形参,需要注意的是,每个端口只能引用一种接口类型,并且引用相同端 口接口类型的端口才可以进行交互。
软件组件的内部行为(Internal Behaviour,IB)如图:
运行实体(Runnable Entity,RE)是一段可执行的代码,其封装了 一些算法。一个软件组件可以包含一个或者多个运行实体。
每个运行实体都会被赋予一个RTE事件(Trigger Event),即RTE 事件(RTE Event),这个事件可以引发这个运行实体的执行。对于 RTE事件可以细分为很多种类,较常用的RTE事件有以下几种:
周期性(Periodic)事件,即Timing Event;
数据接收事件(Data-received Event);
客户端调用服务器事件(Server-call Event)。
Port Access是和端口所引用的端口接口类型密切相关。
对于S/R通信模式,分为显示(Explicit)和隐式(Implicit)两种模式。
若运行实体采用显示模式的S/R通信方式,数据读写是即时的;
当多个运行实体需要读取相同的数据时,若能在运行实体运行之前先把数据读到缓存中,在运行实体运行结束后再把数据写出去,则可以改善运行效率,这就是隐式模式。
显示模式与隐式模式的对比下图所示,可见后者的实现方式中,会在运行实体被调用之前读数据,在运行结束后写数据。
对于C/S通信模式,可分为同步(Synchronous)和异步 (Asynchronous)两种模式,它们的对比如下图所示。
运行实体间变量(Inter Runnable Variable,IRV)即两个运行实体之间交互的变量。
=>>总目录<<=