[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理,原创保护,禁止转载。

专栏 《深入浅出AutoSAR》

1. 整体架构

图片来源: AutoSar 官网

从官往图中可以看出autosar作为汽车ECU软件架构,是通过分层来实现软硬件隔离。就像大多数操作系统一样,通过分层实现软件架构的最通用化。

上面的框框有点零碎,我们试着来归纳下,抽象成下图。 可以更清晰看出它的层级关系。

为了实现应用程序和硬件模块之间的分离,AUTOSAR被抽象成四层:由上至下依次为:应用层(Application Layer)、运行时环境(Run Time Environment,RTE)、基础软件层(Basic Software,BSW)以及微控制器(Microcontroller)。

其中应用程序、实时运行环境(RTE)和基本软件(BSW) 是架构中三个软件层。作为汽车人, 因为有 AutoSar, 我们可以不受硬件改动影响,关注于软件层。

  • 应用软件层:逻辑代码,基本上是与硬件无关的。
  • 实时运行环境:应用程序的完整接口,软件组件之间的通信和通过RTE访问BSW。
  • 基础软件层:分为三个主要层次和复杂的驱动因素: 服务、ECU(电子控制单元)抽象和微控制器抽象。服务进一步划分为代表系统、内存和通信服务的基础设施的功能组。

后续仔细讲解每一个小的组件模块。

2. App应用层

ApplicationLayer实现具体的应用功能,由软件组件(SWC)组成,基于AutoSAR设计的SWC组件能够提高上层应用软件的复用性和灵活性。

每一个SWC相当于一个.c文件,SWC和SWC之间的通信又会通过Port(端口)实现,SWC内部又有多个runable(运行实体)组成。

3. RTE运行时环境

目的:使SWC与ECU的映射无关,隔离APP和BSW

功能:提供跨ECU /ECU内部的通信管理

实现:

1. RTE对Runnables的运行支撑(Runanable的触发条件)

2. RTE对Ports支撑(S/RC/S port的通信方式)

3. 实现SWC之间的通信

4. RTE对数据一致性管理

4. BSW基础软件

4.1 BSW 分层

BSW被抽象划分为部分:微控制器抽象层,ECU抽象层,服务层以及复杂驱动。

ServiceLayer:服务层

1. 提供给应用程序的服务,例如网络服务、内存管理和总线通信服务等

2. 诊断,非易失性内存管理,操作系统(OS),通讯

3. 内存和ECU管理

特别注意:CDD不属于BSW,它是独立Autosar架构的一些复杂驱动,直接通过CDD_SWC来操作硬件驱动。

ECUAbstraction Layer:ECU抽象层

提供统一的访问接口实现对通信、内存或者I/O的访问,从而无须考虑这些资源由微处理器提供还是由外部设备提供。

1. 使上层软件与ECU硬件设计无关

2. 包含ECU板上外部设备的驱动

3. 内部设备与外部设备的接口(I/O)

MCAL:Microcontroller Abstraction Layer 微控制器抽象层

1. 使上层软件与微控制器硬件无关,实现软硬件隔离。

2. 实现MCU中外设的驱动,可以用来访问内存、通信和I/O等

复杂驱动(CCD)

层跨越于微控制器硬件层和RTE之间,其主要任务是整合具有特殊目的且不能用MCAL进行配置的非标准功能模块,将该部分功能嵌入到AUTOSAR基础软件层中,从而实现处理复杂传感器以及执行器的特定功能和时间要求。

4.1 BSW 组件

如下图所示:

基础软件层的组件及其功能对应如下:

1)系统:提供标准化的规定(针对操作系统、定时器以及错误存储器)、ECU特定的服务(ECU状态管理、看门狗管理)和库函数;

2)内存:对内部和外部的内存(非易失性存储器)的访问入口进行标准化;

3)通信:对汽车网络系统、ECU通信系统以及ECU内部软件的访问入口进行标准化;

4)输入/输出:对传感器、执行器以及ECU外设的访问入口进行标准化;

同时,基础软件层模块按照类型可以分为驱动模块、接口模块、处理模块以及管理器。

1、驱动模块

驱动模块包含了控制和使用内部或者外部器件的功能,分为内部驱动和外部驱动。

1)内部驱动

内部器件位于微控制器(单片机)的内部,比如内部EEPROM、内部CAN控制器、内部ADC模块等。它主要是针对单片机内部器件资源的驱动程序,这部分驱动程序属于微控制器抽象层(MCAL)。

2)外部驱动

外部器件是指单片机外部的ECU硬件,比如外部EEPROM、外部看门狗、外部Flash等。外部驱动程序就是针对单片机外部硬件资源的驱动程序,属于ECU抽象层。外部驱动程序需要通过微控制器抽象层(MCAL)驱动程序来实现对外部器件的驱动。这种方法下AUTOSAR也支持嵌入在系统基础芯片(SBCs)中的组件,像收发器以及看门狗等。例如,使用SPI通信接口的外部EEPROM驱动程序是通过SPI总线处理程序来驱动外部EEPROM的。但是有一种例外,对于和内存映射相关的外部器件(如外部Flash存储器),其驱动程序是可以直接对微控制器进行存取访问的,所以这部分驱动程序属于微控制器抽象层(MCAL)。

2、接口模块

接口模块包含了对其次级模块进行抽象的功能,比如对一个特定功能的硬件进行抽象。它提供一个通用的接口函数(API)来访问一种特定的器件类型,且与该类型器件的数目无关,同时也与器件的具体硬件实现无关。

接口模块不会改变数据的内容。一般来说,接口属于ECU抽象层。例如,CAN通信系统的接口模块提供一个通用的接口函数来访问CAN通信网络,并且与ECU上CAN控制器的数目以及硬件实现无关。

3、处理模块

处理模块是一个专用的接口,它控制一个或多个客户端对一个或多个驱动程序进行并行、多重以及异步地访问。也就是说,它起着缓冲、队列、仲裁以及多路复用的功能。同时,处理程序也不会改变数据本身的内容。处理模块通常会并入驱动程序或是接口模块中(如SPIHandlerDriver、ADC Driver等)。

4、管理器

管理器为多重的客户端提供特定的服务。当单纯的处理程序不能满足对多重的客户端进行抽象时,就需要用到管理器来进行处理。除了处理功能外,管理器还可以对数据内容进行评估、改变或是适应数据内容。

一般而言,管理器属于服务层。例如,非易失性随机存储器(NVRAM)的管理器负责对内部或是外部存储设备进行并行的访问,如Flash、EEPROM存储器等。同时,它也可以完成分布式并且可靠的数据存储、数据校验以及默认值的规定等。

5. MCAL微控制器抽象层

MCAL就是硬件驱动的封装,比如CAN、ETH、SPI等外设驱动封装,和芯片息息相关。一般都是购买芯片原厂MCAL的软件包。

主要分为4大模块:

微控制器驱动

1) GPT:General Purpose Timer Driver,通用定时器,为操作系统或者其他基础软件模块提供计时功能

2)  Watchdog:看门狗驱动,除防止程序跑飞基本功能外,功能安全还使用看门狗进行程序流监控,比如监控程序执行时间、执行顺序等。

3) MCU:Microcontroller Unit Driver,基本的MCU设置:时钟、休眠、复位设置等。

4)  Core Test:芯片内核测试,提供上电或者周期检测两种方式,检测结果能触发中断。

存储器驱动

1) Flash Test & Ram Test:存储器测试驱动。

2)  Flash/Eep Driver:提供基本的存储器操作,如初始化,擦除,写入,读取等。

通信驱动

CAN、ETH、LIN、SPI等通讯外设的通信功能实现

I/O驱动

1) Port:所有端口的统称,包含了(DIO和配置成特有功能的io口)

2) ADC:模拟/数字转换器,采样模拟信号,转成数字信号。

3)  DIO:Digital Input/Output Driver,数字输入输出驱动,也就是配置成GPIO功能,实现通用的输入输出功能。

4) PWM:生成周期和频率可变的PWM方波

5)  ICU:Input Caputre Unit,输入捕获单元,捕获方波周期或者捕获方波电平持续时间。

6) OCU:Output Compare Unit,输出比较单元,基于定时器单元的比较模块。

参考文献

面包板社区浅论汽车电子行业的汽车开放系统架构AUTOSAR-汽车
汽车工程师谈技术AUTOSAR架构 - 知乎

Autosar Architecture (Learn from Scratch with Demo)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/172147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker swarm集群之compose启动多服务

Docker swarm集群之compose启动多服务 本篇文章是在搭建过Swarm集群基础上进行的,如未搭建过请移步 : [Docker swarm 集群搭建 - Wanwan’s Blog (wanwancloud.cn)] 环境信息 主机名IP主机配置master10.10.10.32c2gnode0110.10.10.42c2gnode0210.10.…

项目中拖拽元素,可以使用html的draggable属性,当然也可以用第三方插件interact

项目中拖拽元素&#xff0c;可以使用html的draggable属性&#xff0c;当然也可以用第三方插件interact 一、安装二、引用三、使用 一、安装 npm install interactjs二、引用 import interact from interactjs三、使用 <div class"drag_box"> &…

DevOps持续集成-Jenkins(1)

文章目录 DevOpsDevOps概述Code阶段工具&#xff08;centos7-gitlab主机&#xff09;Windows下安装Git&#xff08;作用是&#xff1a;使我们可以上传代码到GitLab&#xff09;Linux下安装GitLab⭐&#xff08;作用是&#xff1a;运行一个GitLab接收代码&#xff09;环境准备先…

【axios】axios的基本使用

一、 Axios简介 1、 Axios是什么&#xff1f; Axios是一个基于promise的HTTP库&#xff0c;类似于jQuery的ajax&#xff0c;用于http请求。可以应用于浏览器端和node.js&#xff0c;既可以用于客户端&#xff0c;也可以用于node.js编写的服务端。 2.、Axios特性 支持Promis…

一文讲明:企业知识库的作用和搭建方法

在现代商务环境中&#xff0c;企业面临着大量的信息和知识流动。这些信息和知识散落在各个部门、团队甚至个人之间&#xff0c;难以进行有效的整合和利用。而企业知识库的出现解决了这一问题。它提供了一个统一的平台&#xff0c;将分散的信息汇聚到一个集中的数据库中&#xf…

Redis实现方式开启新篇章,解决分布式环境下的资源竞争问题,提升系统稳定性

前言 分布式锁一般有三种实现方式&#xff1a; 数据库乐观锁&#xff1b;基于Redis的分布式锁&#xff1b;基于ZooKeeper的分布式锁 本篇博客将介绍第二种方式&#xff0c;基于Redis实现分布式锁。 虽然网上已经有各种介绍Redis分布式锁实现的博客&#xff0c;然而他们的实…

jenkins如何安装?

docker pull jenkins/jenkins:lts-centos7-jdk8 2.docker-compose.yml version: 3 services:jenkins:image: jenkins/jenkins:lts-centos7-jdk8container_name: my-jenkinsports:- "8080:8080" # 映射 Jenkins Web 界面端口volumes:- jenkins_home:/var/jenkins_h…

C++数据结构X篇_21_插入排序(稳定的排序)

文章目录 1. 插入排序原理2. 算法图解3. 核心代码&#xff1a;4. 插入排序整体代码实现 1. 插入排序原理 插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相…

toluaframework中C#怎么调用Lua的方法以及无GC方法

toluaframework中C#怎么调用Lua的方法 问题Util.CallMethodLuaManager.CallFunctionLuaFunction.LazyCall 解决方案LuaFunction脚本无GC消耗的调用 用法总结 问题 用过luaframework框架的人应该都知道框架提供了Util的工具类&#xff0c;工具类提供了一个方法就是Util.CallMet…

可自由搭建的能源管理平台,轻松实现高效节能

随着科技的不断发展&#xff0c;能源问题越来越重要。为了提高能源的利用效率&#xff0c;减少能源浪费&#xff0c;能源用能企业纷纷开始注重能源管理工作&#xff0c;并想要一款可以进行高效管理的工具。智慧能源管理平台&#xff0c;是一款可自由搭建的能源管理平台&#xf…

零基础Linux_23(多线程)线程安全+线程互斥(加锁)+死锁

目录 1. 线程安全 1.1 线程不安全前期 1.2 线程不安全原因 2. 线程互斥 2.1 加锁保护&#xff08;代码&#xff09; 2.2 锁的本质 3. 可重入对比线程安全 4. 死锁 4.1 死锁的必要条件 4.2 避免死锁 5. 笔试面试题 答案及解析 本篇完。 1. 线程安全 基于上一篇线程…

改善游戏体验:数据分析与可视化的威力

当今&#xff0c;电子游戏已经超越了娱乐&#xff0c;成为一种文化现象&#xff0c;汇聚了全球数十亿的玩家。游戏制作公司正采用越来越复杂的技术来提高游戏质量&#xff0c;同时游戏数据分析和可视化工具变得不可或缺。 数据的力量&#xff1a;解析游戏体验 游戏制作涉及到大…

C51--单片机中断

51单片机是单线程模式&#xff0c;需要用到硬件中断。 一、中断系统 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事的时候&#xff0c;外界发生了紧急事件请求&#xff0c;要求CPU暂停当前工作&#xff0c;转而去处理这个紧急…

软考高项-计算题(3)

题10 问题一 EV50*0.525 问题二 EACBAC/CPI CPIEV/AC25/28 EAC50*28/2556 问题三 因为CPI<1&#xff0c;所以项目实际费用超支 题11 PV2000500010000750006500020000177000 AC2100450012000860006000015000179600 EV200050001000075000*0.965000*0.720000*0.351370…

CANOE 仿真+测试

仿真测试 CANoe的自动化测试系统简介Canoe TFS常用函数测试判别函数测试架构函数测试报告函数检测函数 创建自动化测试工程其他常用函数 CANoe的自动化测试系统简介 基于CANoe的自动化测试系统架构&#xff0c;根据ECU的测试环境和测试规范&#xff0c;搭建基于CANoe的测试系统…

【置顶帖】关于博主/关于博客/博客大事记

关于博主 ● 信息安全从业者 ● 注册信息安全认证专家资质 ● CSDN认证业界专家、安全博客专家 、全栈安全领域优质创作者 ● 中国信通院【2021-GOLF IT新治理领导力论坛】演讲嘉宾 ● 安世加【2021-EISS企业信息安全峰会-上海】演讲嘉宾 ● CSDN【2022-隐私计算论坛】演讲嘉宾…

uni-app打包apk实现自动更新

一、直接复制粘贴就可用(豪横) app.vue文件里写 //app.vue里写 <script>export default {onShow: function() {console.log(App Show)},onHide: function() {console.log(App Hide)},onLaunch: function() {let appVersion uni.getSystemInfo({success: function(e) {ap…

springboot在线招聘系统

springboot在线招聘管理系统&#xff0c;java在线招聘管理系统&#xff0c;在线招聘管理系统 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&#xff09; 硬件环境&#xf…

手机桌面待办事项APP推荐

每天&#xff0c;我们每个人都面临着繁琐的事务和任务&#xff0c;而手机成了我们日常生活中不可或缺的伙伴。手机上的待办事项工具像一个可靠的助手&#xff0c;可以帮助我们更好地记录、管理和完成任务。在手机桌面上使用的待办事项APP推荐用哪一个呢&#xff1f; 手机是我们…

MTK AEE_EXP调试方法及user版本打开方案

一、AEE介绍 AEE (Android Exception Engine)是安卓的一个异常捕获和调试信息生成机制。 手机发生错误(异常重启/卡死)时生成db文件(一种被加密过的二进制文件)用来保存和记录异常发生时候的全部内存信息,经过调试和仿真这些信息,能够追踪到异常的缘由。 二、调试方法…