当前位置: 首页 > news >正文

[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)

相关文章:

[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理,原创保护,禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 ​ 图片来源: AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构,是通过分层来实现软硬件隔离。就像大多数操作系统一样&#xff…...

迁移学习 - 微调

什么是与训练和微调? 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先,你需要随机初始化参数,然后开始训练网络,不断调整参数,直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会…...

09 用户态跟踪:如何使用eBPF排查应用程序?

09 用户态跟踪:如何使用eBPF排查应用程序? sudo bpftrace -e usdt:/usr/bin/python3:function__entry { printf("%s:%d %s\n", str(arg0), arg2, str(arg1))} # -*- coding: UTF-8 -*- import socket from socket import SOL_SOCKET, SO_R…...

深入浅出排序算法之堆排序

目录 1. 算法介绍 2. 执行流程⭐⭐⭐⭐⭐✔ 3. 代码实现 4. 性能分析 1. 算法介绍 堆是一种数据结构,可以把堆看成一棵完全二叉树,这棵完全二叉树满足:任何一个非叶结点的值都不大于(或不小于)其左右孩子结点的值。若父亲大孩子小&#x…...

Linux 命令(11)—— tcpdump

文章目录 一、命令简介二、使用方法三、命令选项四、基本语法和使用方法1. 显示 ASCII 字符串2. 抓取特定协议的数据3. 抓取特定主机的数据4. 将抓取的数据写入文件5. 行缓冲模式 五、理解tcpdump的输出六、过滤表达式1. Host 过滤2. Network 过滤3. Proto 过滤4. Port 过滤5. …...

8.自定义组件布局和详解Context上下文

pages/index.vue layout布局运行在服务端 1、在项目的目录下新建layout文件夹,并新建一个blog.vue布局文件 2、在页面中的layout函数里,返回刚才新建布局文件的名字blog就可以使用了 export default {...layout (context) {console.log(context)retu…...

几个Web自动化测试框架的比较:Cypress、Selenium和Playwright

介绍:Web自动化测试框架对于确保Web应用程序的质量和可靠性至关重要。它们帮助开发人员和测试人员自动执行重复性任务,跨多个浏览器和平台执行测试,并在开发早期发现问题。 以下仅代表作者观点: 本文探讨来3种流行的Web自动化测…...

Android Studio中配置aliyun maven库

当下载第三方库失败的时候,通过Android Studio中配置aliyun maven库,达到正常下载库效果 在项目的根build.gradle里面(不是module)buildscriptde对应位置添加配置: maven { url https://maven.aliyun.com/repository/…...

记录使用阿里 ARoute 遇到的坑

1.按照官方一个配置好之后 尝试使用 跳转出现 Aroute Theres no route matched path"" 我这边遇到的坑是配置问题 kotiln 使用了 Java的配置 plugins {id("com.android.application")id("org.jetbrains.kotlin.android")id("kotlin-kapt&…...

lesson2(补充)关于const成员函数

个人主页:Lei宝啊 愿所有美好如期而遇 前言: 将const 修饰的 “ 成员函数 ” 称之为 const 成员函数 , const 修饰类成员函数,实际修饰该成员函数 隐含的 this 指针 ,表明在该成员函数中不能对类的任何成员进行修改…...

前端 :用HTML ,JS写一个 双色球彩票中将机制,因为时间不够,加上本人懒没有用CSS美化界面,多包涵

1.HTML <body><div id"content"><div id "top"><div id "username">用户号码&#xff1a;</div><div id "qiu"><span id "red">红球&#xff1a;</span><input id…...

前端页面如何自适应--4种方法

前端页面有很多方法可以实现。这里我将介绍五种常用的方法&#xff0c;并提供相应的代码示例。 1. 使用CSS媒体查询 通过CSS媒体查询&#xff0c;可以根据不同的屏幕尺寸应用不同的样式。在Vue组件中&#xff0c;可以在样式部分使用媒体查询&#xff0c;使排版根据屏幕大小进…...

2024王道考研计算机组成原理——总线

6.1 总线概述 每一个外设都通过IO接口和DB、CB、AB相连 三系统总线结构&#xff1a; 桥有总线仲裁的功能&#xff0c;就是把某一总线的使用权分给哪个设备&#xff1f; 6.1.2 总线的性能指标 总线复用&#xff1a;分时传输地址&数据 6.2 总线仲裁 通过控制总线来发送使…...

【Linux】进程概念(下)

进程概念 一、环境变量1. 命令行参数2. 常见的环境变量&#xff08;1&#xff09;PATH&#xff08;2&#xff09;PWD&#xff08;3&#xff09;HOME&#xff08;4&#xff09;env 查看所有的环境变量 3. 获取环境变量&#xff08;1&#xff09;通过代码获取环境变量&#xff08…...

基于Spring Boot的本科生就业质量设计与实现

摘 要 信息化爆炸的时代&#xff0c;互联网技术的指数型的增长&#xff0c;信息化程度的不断普及&#xff0c;社会节奏在加快&#xff0c;每天都有大量的信息扑面而来&#xff0c;人们正处于数字信息化世界。数字化的互联网具有便捷性&#xff0c;传递快&#xff0c;效率高&am…...

238. 除自身以外数组的乘积 --力扣 --JAVA

题目 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法&#xff0c;且在 O(n) 时间复…...

如何判断一个类是线程安全的

线程安全 一个类或者程序提供的接口&#xff0c;多个线程之间的切换不会导致该接口的执行结果存在二义性&#xff0c;也就是不必考虑同步问题。 或者说一段代码可能会被多个线程同时执行&#xff0c;如果每次运行的结果和单线程执行的结果是一样的&#xff0c;并且其他变量的…...

MyBatis的各种查询功能

文章目录 情景查询一个实体类对象查询一个List集合查询单个数据查询一条数据为map集合查询多条数据为map集合方法一方法二 情景 如果查询出的数据只有一条&#xff0c;可以通过 实体类对象接收List集合接收Map集合接收&#xff0c;结果{password123456, sex男, id1, age23, us…...

【Tomcat】如何在idea上部署一个maven项目?

目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例&#xff1a; 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…...

Three.js 材质的 blending

Three.js 材质的 blending // blending modes export type Blending | typeof NoBlending| typeof NormalBlending| typeof AdditiveBlending| typeof SubtractiveBlending| typeof MultiplyBlending| typeof CustomBlending;// custom blending destination factors export t…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...