汽车开放系统架构(Automotive Open System ARchitecture)
Posted bobuddy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汽车开放系统架构(Automotive Open System ARchitecture)相关的知识,希望对你有一定的参考价值。
汽车电子学习笔记—AutoSAR概述
1、概述
Automotive Open System ARchitecture,汽车开放系统架构
2、架构
1)架构图
2)详细描述
应用软件层(AppL)
由一个个SWC组成的,如车窗,锁,车灯等,每个SWC咱们可以理解为一个.c文件
实时运行环境(RTE)
1)可以理解成一个中间层,负责各模块中转调用和管理,将BSW和SWC做隔绝,使SWC与ECU的映射无关
2)将一个SWC的信息通过RTE连接到其他SWC或者BSW上
4)在Vector的工具链中,RTE是自动生成的
5)作用:
提供 跨ECU / ECU内部 的通信管理,实现SWC之间的通信
提供 对runnable的管理功能(触发、唤醒等,简单说就是runnable需要映射到Task上运行嘛,而这个映射就是通过RTE具体实现的)
RTE就是VFB(虚拟功能总线)的具体实现
配置OS的一部分(tasks, events, alarms)
抽象了OS,防止SWC直接访问OS和BSW
基础软件层(BSW)
a)硬件抽象层(MCAL)
硬件抽象层又叫MCAL,就是将芯片的寄存器操作都封装成一个AutoSAR规定的统一的库Api,或者说将芯片上的功能都封装称一个一个的AutoSAR规定定义的API函数,供上层调用。
目的:使上层软件与微处理器型号无关
功能:包含MCU中内部外设的驱动和使用MCU内存映射的外部设备的驱动
b)ECU抽象层
对ECU上包括主芯片在内的所有设备的封装,这些设备其实也是要通过主芯片控制的,如外置存储,外置看门狗等,需要和主芯片相连接,由主芯片的接口去配置它。因此,其底层还是需要MCAL的支持
目的:使上层软件与ECU硬件设计无关
功能:包含ECU板上外部设备的驱动和内部设备与外部设备的接口(I/O)
c)服务层
将所有与硬件相关的功能都抽象成一个具体应用服务,如通信,这里就将CAN、I2C和串口等一系列的通信统一抽象称COM通信,应用层可以无需知道该通信具体是走哪种通信方式
目的:提供给应用程序可用的服务
功能:服务层里是包含操作系统的功能、车辆网络通信管理服务、存储器服务(NVRAM管理)、诊断服务(包括UDS通信、错误存储和故障处理)、ECU状态管理,模式管理、逻辑和时间程序流监控(Wdg管理器)、密码服务(密码服务管理)、调度管理(Schedule
Manager) 功能划分:系统服务、存储器服务、通信服务
d)复杂驱动
又称为CDD,主要工作是将AutoSAR未定义的一些功能封装起来,给应用层提供接口来调用这些功能
目的:提供复杂传感器和执行器的驱动
功能:重要的应用模块可以直接访问硬件资源,例如: 喷油量控制, 胎压监测
3)详细架构图
4)工具
DaVinci Developer: 主要用来设计AppL的程序架构
DaVinci Configurator pro: 主要用来配置BSW和自动生成RTE的
5)接口类型
Send/Receiver(S/R)接口:传输数据。通过RTE传输数据,并且通过RTE管理数据的传输,避免数据出问题
Std_ReturnType Rte_Read_<port>_<data> (<DataType> *data)
Std_ReturnType Rte_Write_<port>_<data> (<DataType> data)
Com_SendSignal()
Com_ReceiveSignal()
Client/Server(C/S)接口: 提供操作。就是Server提供函数供Client调用,可以同步或异步调用
FUNC(void, AppWindow_CODE) XXXX_XXXTrigSet(uint8 value) /* PRQA S 0624, 3206 */ /* MD_Rte_0624, MD_Rte_3206 */
{
/**********************************************************************************************************************
* DO NOT CHANGE THIS COMMENT! << Start of runnable implementation >> DO NOT CHANGE THIS COMMENT!
* Symbol: PtWindowTrigSet_WindowTrigSet
*********************************************************************************************************************/
XXXAAATrigSetToBBB(value);
/**********************************************************************************************************************
* DO NOT CHANGE THIS COMMENT! << End of runnable implementation >> DO NOT CHANGE THIS COMMENT!
*********************************************************************************************************************/
}
6)SWC
应用层的SWC:灯,门锁,车窗…
BSW中的SWC:IO硬件抽象层(IoHwAb)、复杂驱动(Cdd)
7)Runnable
Runnable就是SWC中的入口函数,DaVinci软件生成的时候,Runnable是空函数,需要手动添加代码来实现其实际的功能
FUNC(void, AppWindow_CODE) AppWindowRunnable(void)
{
... ...
}
Runnable实际是被task调用,具体可以在rte.c中查看到各个swc的runnable,被不同时间的task调用
TASK(Task10ms)
{
... ...
AppEmsRunnable()
AppLearnRunnable()
... ...
}
TASK(Task1ms)
{
... ...
CddAmdRunnable();
IohInputRunnable1ms();
... ...
}
TASK(Task20ms)
{
... ...
AppDefrosterRunnable();
AppPwrModRunnable();
... ...
}
一个SWC可以配置多个不同时间的runnable
不同SWC之间的通信,无论是ECU内部还是ECU之间,都不会遇到数据一致性问题,因为RTE会负责保证数据一致性。
而同一个SWC,运行在不同task的runnable可能存在数据不一致性问题,解决办法:
a)专用区域(Exclusive Areas )
b)内部变量(Inter-runnable variables)
b)内部变量(Inter-runnable variables)
Runnables的触发条件
a)RTE给runnables提供触发条件,也就是runnable在设计的时候,需要有触发条件,不然无法运行
b)AutoSAR中主要规定了以下一些触发条件(DaVinci软件中的配置):
初始化事件:初始化自动触发
定时器事件:给一个周期定时器,时间到了就触发
接收数据事件(S/R):Receiver Port 一旦收到数据,就触发
接收数据错误事件(S/R)
数据发送完成事件(S/R):Send Port 发送完成,就触发
操作调用事件(C/S):当调用到了该函数的时候
异步服务返回事件(C/S)
模式切换事件
模式切换应答事件
c)DaVinci软件中的配置项
以上是关于汽车开放系统架构(Automotive Open System ARchitecture)的主要内容,如果未能解决你的问题,请参考以下文章
软件定义汽车之 Android Automotive OS 发展历程
软件定义汽车之 Android Automotive OS 发展历程
Android车载应用-Automotive和distractionOptimized