autosar架构详细介绍_Autosar Part1:基础介绍

ffc5663e1be4e7b8d3dfcef8927757b3.png

Autosar的出现主要基于两点因素:

1、 汽车电子系统复杂度和代码量的不断提升,当前整车控制系统的代码量都已达到千万行代码的级别,其复杂度远比高端的航空航天要高,只是安全性比他们要低些。

2、 软件的复习用性差,由于软件依赖于固定的硬件开发,当硬件发生变更时功能往往需要推倒重来,无疑增加重复开发的工作量和周期,这都是血琳琳的投入和成本。

对于此,圈内几位大佬岂能坐视不管,于是相约一起讨论五百回合最后搞了个Autosar出来,并成为最初的九大核心成员(博世、BMW、大陆、福特、戴姆勒、PSA、通用、丰田和大众)。

dcb1a0176209ca6404c1f829a7c616e6.png

Autosar在2005年发布了第一个Release版本,其只是搭建了概念雏形,随着不断的发展和完善,Autosar3.x版本已经到了可以投产的水平,在2018年则到了更加完善的4.4版本,随之带来的也是整个规范文档的指数增长,到了4.4版本都已是几万页的规范文档,我相信没有一个人认真看过(当然你也不需要看,第三方工具帮你搞定一切,你的重点是放在应用开发上,而这也是Autosar设计的主要任务),但即便如此Autosar依然是不完善的,因此它仍然在路上。

d496c1655598ebdd7378e5a60376eae8.png

d0212a145ad8382e47e088bd463c7734.png

关于Autusar的概念,在网上或者官网上你可以得到详细权威的说明,但说白了Autosar无非就是一套标准,它规范了我们ECU的整个开发流程,标准了ECU内部数据的交换格式和形式,标准了我们ECU代码如何规范如何书写,其目的就是规范化电子控制器的软件架构,提高软件的复用性和协作开发的灵活性。

Autosar的经典架构图如下,可以看到运行在Microcontroller之上的ECU软件主要有应从层(Application Layer)、RTE层和基础软件层(BSW)三层。

182011f784803cdaa788f6e6a35171c6.png

1、应用层:其将软件都划分为一个Atomic Software component(ASWC),包括Application Software Component、Sensor Software Component、Actuator Software Component等。

2、RTE层:Autosar最核心的RTE,其实就是借鉴IT行业的中间件,所谓的中间件就是一种独立的系统软件或服务程序,分布式应用软件借助其在不同的应用之间共享资源,因此RTE的主要任务就是提供基础的通信服务,支持Software Component之间和Software Component到BSW的通信(包括ECU内部的程序调用、ECU外部的总线通信等情况)。

3、基础软件层(BSW):其由很多组件构成,但主要可以划归为服务层(Service Layer)、ECU抽象层(ECU Abstraction Layer)、微控制器抽象层(Microcontroller Abstraction Layer)和复杂设备驱动(Complex Device Drivers)四大部分。

f4922907655c202ed7f135ca30946019.png

(1)服务层(Service Layer):为所有应用提供各种服务,如诊断服务、通讯服务和ECU内存管理服务等。

(2)ECU抽象层(ECU Abstraction Layer):屏蔽芯片上内部资源与板上资源上的差异性,例如Windows就是一个抽象,我们在使用时不需要考虑处理器是英特尔的还是AMD的以及主板、声卡啥的,因为微软帮你搞定一切,同理,ECU抽象层包含了访问微控制器的驱动,其使上层软件与微控制器相分离,从而实现应用在不同硬件的移植

(3)微控制器抽象层(Microcontroller Abstraction Layer):封装了微控制器层以及外围设备的驱动。将微控制器内外设的访问进行了统一从而屏蔽了芯片上的资源,它会让你感觉不到我们在使用英飞凌还是飞思卡尔的芯片。

(4)复杂设备驱动(Complex Device Drivers):复杂设备驱动说白了就是将不能标准化的放在一起即构成复杂设备驱动,如发动机的喷油、点火驱动等,因此复杂设备是个框什么也可以往里装。

以上就是传统Autosar的基本架构,当然任何事物的发展必须跟随潮流,随着无人驾驶技术的如火如荼、车联网和云技术的日益发展,Autosar也开始自我调整,推出Autosar Adaptive Platform,实现与IT技术的相互融合。Adaptive Autosar不仅可满足现有需求,还可适用未来需求,它将支持各种自适应的部署、复杂微控制器及与各种非Autosar系统的互动。

f38760a92843113be6a98efcf691d782.png

Adaptive Autosar与传统Autosar的差异主要体现在如下几个方面:

c10f26c645ebaf69263ebe5c6143601d.png
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里的NM主要是针对Can协议的网路管理。 AUTOSAR CanNM的核心思想主要归纳为以下两条: 1.  如果节点需要保持通信,则节点需要周期的发送NMPDUs,否则停止发送NMPDUs 2.     如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。   工作模式和状态   CanNm一共有三个工作模式 1.  Network Mode 2.  PrepareBus-Sleep Mode 3.  Bus-Sleep Mode 模式的改变应该通过回调函数通知上层。 下面单独说每种模式   (1)Network Mode Network Mode又包括三个内部状态 1. Repeat Message State 2. Normal Operation State 3. Ready Sleep State ①Repeat Message State 这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点发现。这个状态可以用来检测总线上的节点。 当进入Repeat Message State时,节点应该开始传送NMPDUs。 在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。 当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。   ②Normal Operation State 这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该发送NMPDUs。 在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。   ③ReadySleep State 这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。 如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。 如果该节点需要使用总线,则节点进入Nomal Operation State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。 (2)PrepareBus-Sleep Mode   这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为发送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。 当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。 在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。   (3)Bus-SleepMode   Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。 当进入Bus-Sleep Mode时候,应该通知上层应用。 在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。 如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。 ———————————————— 版权声明:本文为CSDN博主「cococenstar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cococenstar/article/details/84096689
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值