汽车开放系统架构(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软件中的配置项

 

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值