版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Xiaowestwind/article/details/106869819
AUTOSAR
- 什么是autosar
AUTOSAR是AUTomotive Open System Architecture,翻译成中文就是汽车开放系统架构。
AUTOSAR是由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,各成员保持开发合作伙伴关系。
AUTOSAR主要标准了3大方面:
- 软件接口
- 交换格式
- 方法论
- 为什么用autosar
- 汽车ECU数量越来越多:由之前的单控制器,到多控制器,再到域控制器,数量倍增。
- CPU越来越复杂:由8位,到16位,再到32/64位,多核
- 总线数量和复杂度提升:除了有基本的CAN、MOST、LIN外,还有速度更快的FlexRay和Ethernet。
引入的问题:
这会带来什么问题?
- 传统嵌入式不支持完整的硬件抽象
- 软件模块化程度有限
- 代码可重用性差,更换芯片,代码几乎要重新开始写
- 供应商需要提供各种软件来适配OEM和车辆平台版本
- Autosar的目标
- 整个产品生命周期可维护,车的整个生命周期内软件可以不断更新和升级
- 软硬件分离,开发更灵活
- 将开发活动从实施转移到配置
- 通过制定标准,来提高BSW软件的质量(之前你得花钱请高手实现UDS协议栈,买了AUTOSAR之后,就不需要了)
- 竞争不在底层的实现,而是集中在功能上
- 降低成本,通过重用提高软件质量,从而降低成本(目前还未体现)
- 重用开发方法和工具
- 重用基础软件(尤其是中间层,比如CAN协议栈,以太网协议栈等、网络管理、状态管理)
- 重用性可以覆盖整个网络节点,甚至可以跨不同的OEM
- Auto的缺点
- AUTOSAR规范更新升级慢
- AUTOSAR规范理解不太一致
- AUTOSAR的软件价格高昂
- AUTOSAR软件的重用性面临挑战
- 初始投资
你以为买了AUTOSAR软件包就完事了?不,你可能还要买AUTOSAR工具链供应商的支持服务,培训服务,这些都是几十万级别的。前期需要做大量技术积累之后,才能比较正常的开展工作。
- 复杂的文档标准
- 软件架构
-
-
- 微控制器驱动
-
- GPT:General Purpose Timer Driver,通用定时器,为操作系统或者其他基础软件模块提供计时功能。GPT驱动可以提供启动和停止硬件定时器、得到定时器数值、控制时间触发的中断、控制时间触发的中断唤醒等功能。GPT通道可以设置为连续模式(CONTINUOUS)或单次模式(ONESHOT)。
- Watchdog:看门狗驱动,除防止程序跑飞基本功能外,功能安全还使用看门狗进行程序流监控(Deadline and Program Flow Monitoring),比如监控程序执行时间、执行顺序等。
- MCU:Microcontroller Unit Driver,芯片时钟、休眠、复位设置。
- Core Test:芯片内核测试,提供上电或者周期检测两种方式,检测结果能触发中断。
-
- 存储器驱动
-
- Flash Test & Ram Test:存储器测试驱动。
- Flash/Eep Driver:提供基本的存储器操作,如初始化,擦除,写入,读取等。
-
- 通信驱动
- I/O驱动
-
- Port:pinmux配置。
- ADC:采样模拟信号,转成数字信号。
- DIO:Digital Input/Output Driver,数字输入输出驱动,在AUTOSAR中,将一个单片机数字I/O引脚(Pin)定义为DIO通道(DIO Channe可把若干个DIO通道通过硬件分组成为一个DIO端口(DIO Port),DIO端口中相邻几个DIO通道的逻辑组合则称为DIO通道组(DIO Channel Group),在配置过程中可以设置寄存器位蔽值、位偏移量等,从而对多个数字I/O引脚同时进行读/写操作。
- PWM:生成周期和频率可变的方波
- ICU:Input Caputre Unit,输入捕获单元,捕获方波周期或者捕获方波电平持续时间。
- OCU:Output Compare Unit,输出比较单元,基于定时器单元的比较模块。
- SWC介绍
-
- SWC简介
SWC,全程software Components,软件组件,可以理解为软件模块,是功能模块的一个封装,比如汽车,比如汽车的电动窗的操作就可以是一个SWC。
SWC,是AUTOSAR APP层的重要组成部分,分布如下:
-
- SWC类型
SWC的分类的两种方法,一种是按结构大小来分,一种是按照SWC的用途来分。
- 按照结构大小分:原子(Automic)SWC、组合(Composition)SWC,在Vector的达芬奇软件中新建SWC时可以选择:
原子SWC意思是最小的不可分割的软件模块。
组合SWC中包含原子SWC,起始就是包含和被包含的关系,组合SWC只是逻辑上的一个实现,实际不会占用任何内存。
- 按照用途分
APP应用SWC(Application Swc),即普通SWC。
传感器SWC(SensorActuator SWC),传感器执行器SWC一类,特殊的SWC,用于处理传感器和执行器
Cailtration SWC 用于和外部设备共享调教参数
Nvblock SWC 与NVRAM或者内存进行交互时使用
I/0 Hardware Abstration 可以直接访问硬件抽象层。
Complex Device Driver SWC复杂设备驱动SWC,此SWC用于为AUTOSAR不支持或者对一些操作时序要求很高的操作,需要为外部设备开发一个复杂设备驱动程序(CDD)。
Service Proxy SWC 服务代理SWC,它充当向一个或者多个远程ECU提供内部服务的代理,他的主要用途是整个系统中分发车辆的模式信息。
用的最多的是APP swc和Complex Device Driver SWC。
- Ports简介
-
- Ports概念
在APP层面可以分成下面这些SWC
这是一个典型的SWC级联的工作场景,那SWC和SWC之间需要通信,通信需要用到端口Ports。
AUTOSAR中定义了两种类型的端口,后面详细讲述这两种端口:
- Sender/Receiver
- Client/Server
还有一种分法:
- 需求端口,Require Ports,R-Ports,有需求的端口,当要接收或要求数据或期望来自其他实体的数据时,使用此类型的端口。
- 提供端口,Provide Ports,P-Ports,提供服务的端口,当要传输数据或SWC是向其他实体提供某些服务的提供者时,使用此类型的端口。
- 需求/提供端口,Provide Require Ports,PR-Ports,这只在AUTOSAR4.0以后才有。
- 2. Sender/Receiver
- Sender/Receiver通过RTE来传输数据(对数据一致性做了处理,比如同时访问这种问题),可以包含多种数据类型,
- 简单数据类型(int、float)
- 复杂数据类型(arry、record)
- 通信方式可以是:1:n(1对多,1个模块发送,多个模块接收)或者n:1(多对1多个模块发送,1个模块接收)
代码:
//Receiver
Rte_Read_Door_DoorOpen()
//Sender
Rte_Write_Door_DoorOpen()
-
- Client/Server
模块之前相互调用,Client调用Server,比如A SWC调用B AWC,A就具有一个客户端Client,B具有个服务端Server,如下图:
- 一个SWC调用另外一个SWC,代码接口如下
Rte_Call_State_OpenDoor()
- Runable介绍
-
- Runable概述
Runable,顾名思义,可运行实体,可以运行的代码,起始可以理解为C语言中的一个函数,可被运行的函数,里面放了实际功能的实现。
举个例子,车速显示在仪表:
计算实际车速的SWC为例,这个SWC通过旋转值极端出来的实际的车速发送的到CAN总线上,在AUTOSAR的SWC生成的代码框架如下图,Update_SpeedValue函数就是一个Runable(可以运行的实体),运行条件在达芬奇工具中可以配置,这里是20ms为周期运行一次,除了周期触发Runable的条件外,还有其他触发Runable运行的条件。
-
- Runable运行的条件
- 数据接收事件Data Received event:一个Ports的数据被接收到了
- 定时事件 Timing Event:定时器溢出
- 操作调用事件Operation Invoked Event被其他模块调用,作为Server runnable
- 模式切换事件Mode Switch Event:,每当更改ECU模式时,都可以触发可运行状态以执行某些工作。例如ECU关机模式,如果ECU需要在关机前执行某些工作,则该事件应与将在关机前执行工作的可运行程序挂钩。
- 数据接收错误事件Data Received Error Event:同样,不言自明,当数据接收错误时,都可以调用可运行对象以对此类事件采取措施。
- 数据发送完成事件Data Send Completed Event:如果成功发送数据以对数据传输完成采取进一步措施,则此事件将触发可运行事件。
这些触发方式在Vector Davinci Develop工具软件中可以配置,界面如下:
-
- Runable类型
大致分为3种:
- Init Runnable:ECU初始化的时候,只被调用了一次,其实说白了就是初始化函数。
- Periodic Runnable:定时器周期触发Runable的运行,必须设置周期时间。
- Server Runnable:用于实现Ports中的Client/Server,就是那个被调用的函数。
- Automic SWC、CompositionSWC、Runable、Ports关系
截止到目前,已经介绍了APP层的AutoMic SWC、和CompositionSWC 、Runable、Ports,他们都有什么关系,下图说明: