当前位置:网站首页>【AutoSAR 十二 模式管理】
【AutoSAR 十二 模式管理】
2022-07-02 23:49:00 【柯宇谦】
AutoSAR 十二 模式管理
1. 术语描述
每个不同的ECU要完成的功能都不太一样,所以我们的底层BSW需要根据我们的上层功能需求做出相应的实时调整。
- 这个调整的动作我们称为Action;
- 什么时候调整、怎么触发这个调整的机制我们称为Rules。
在BSW层中,当满足一些规则(Rules)的时候,执行相应的动作(Action),这就是模式管理
- Mechanisms for notification: 通知机制
- Service requests for mode changes:模式切换
- Mode arbitration: 模式仲裁。
- Mode control: 模式控制。
2. BswM
BswM就是一个基于Rules的服务模块,主要工作根据制定的Rules,执行相应的Action。
对Rules的评估是可以有两种形式的:立即 和 延迟
- 立即:当然就是被call了之后立马开始了
- 延迟:在被call之后,需要执行到BswM_MainFunction()这个函数的时候,才开始,所以会有一定的延迟
2.1 ESH (ECU State Handing)
2.2 Module Initialization
• Module Initialization: 这个是在OS启动之后,在BswM初始化各BSW模块的时候,使用的初始化流程。也就是OS启动之后,进入了Init Task,然后在这个Taks中会初始化BswM和BSW各模块
• Initialization: 这是在OS启动之前,初始化一些运行OS必要的初始化配置,一般是初始化一堆Memory。其实,MCU模块、DIO模块和PORT模块这些驱动的初始化也是可以放在这里的.
3. EcuM
EcuM就是管理Ecu状态的
EcuM其实有两种定义:Flexible(灵活的)和Fixed(固定的),一般来说我们使用的都是Flexible的方式,Fixed一般会用在AutoSAR 3.x上。
3.1 Ecu上下电流程
上电流程
- 上电: 首先是由cstart.c这样的引导代码,引导CPU跳入main()函数。然后在main()函数中做OS的初始化准备
- 预启动OS: 在预启动的阶段,会进入EcuM_Init,在这里面会做一些Error的判断,最后就是启动OS了
- 启动OS之后: 启动OS之后,会进入到一个Task中,被称为Init Task,这里会调用EcuM_StartupTwo()函数,在这个函数中主要做了SchM和BswM的初始化,并且在这里就通过BswM可以将ADC、PORT等这些底层的驱动模块都初始化了
- 启动BswM之后: 启动BswM之后就算是完成了Startup的阶段,然后会进行Rte_Start(),之后就进入了UP的阶段了,算是可以正常运行了
下电流程
- BswM通知EcuM下电: 最关键的就是EcuM_GoDown()这个函数,当调用之后,就进入到EcuM的下电流程了
- 预关闭OS: 这里面就是做一些Deinit的操作,然后设置一下下电的设置,最后关闭OS
- 关闭OS: 这里会调用一个ShutDownHook(),来让用户处理关闭OS的一些定制工作
- 关闭OS之后: 这里会依据不同的下电需求(直接关机还是重启),进入到不同的动作中去
睡眠(Sleep)
因为睡眠模式一般是为了节能。进入睡眠会有两种模式:Poll或Halt,就是不断循环或停止的模式。
- 准备睡眠: 就是GoSleep阶段,先使能唤醒源,然后指定唤醒源当前的状态,最后GetResource,这之后将由EcuM接管。详细可见下面的图片:
- 进入睡眠: 睡眠有两种状态:
• 进入Poll的话:先设置MCU状态Mcu_SetMode(ECUM_SLEEP…),然后执行EcuM_Mainfunction,进入后就是激活唤醒源,然后不断的检查是否被唤醒了
• 进入Halt的话:先设置Global Suspend,然后生成Ram Hash,接着设置MCU状态Mcu_SetMode(ECUM_HALT…),然后Global Restore使得全局恢复。如果在Halt下想要唤醒,需要检查Ram Hash - 唤醒: 首先设置MCU状态Mcu_SetMode(ECUM_NORMAL…),然后禁止唤醒源,接着重启各类底层驱动,最后就是RelsaseResource,唤醒之后由BswM接管。详细可见下面的图片:
4. 网络管理
AutoSAR的网络管理(Network)是通过网络管理报文(NM Message)实现的,主要分为三大模式:
• 网络模式(Network Mode)
• 预睡眠模式(Prepare Sleep Mode)
• 睡眠模式(Bus-Sleep Mode)
5.1 Network Mode
5.1.1 Repeat Message State(帧重复状态)
当ECU上电后通信网络会自动进入Bus-Sleep状态,然后通过唤醒源唤醒后进入Network Mode的Repeat Message State中。
当进入Repeat Message State后,会根据设定按照一定的周期重复的发送一系列的NM Message,目的是告诉其他的节点,我当前的节点被唤醒了。
• 主动进入就是我的节点因为有报文要发送,需要激活我的通信网络来发送报文,就要主动进入Repeat Message State。
• 被动进入就是因为其他节点进入后发送了一系列重复的NM Message,而收到这些NM Message的节点就被动进入了。
- 当进入Repeat Message State后,会开启一个计时器T_NM_TIMEROUT,这个计时器在发送或收到一帧NM Message的时候会自动清零。
- 当计时器处在Normal State或Ready Sleep State下的时候如果超时就会进入到Prepare Sleep Mode,也就是触发进入Prepare Sleep Mode的条件
5.1.2 Normal State(正常运行状态)
在正常模式下,NM Message也会周期性的发送,防止T_NM_TIMEROUT超时。
每次发送NM Message就会更新T_NM_TIMEROUT。当这时ECU不再准备发送和接收数据后,就可以进入到Ready Sleep State。
Ready Sleep State不再发送NM Message。
5.1.3 Ready Sleep State(准备睡眠状态)
在Ready Sleep State下,还有其他节点会发网络管理帧保持网络唤醒,此时ECU处于等待进入Prepare Sleep Mode,T_NM_TIMEROUT仍然会因为NM Message而清零。所以这样的结果就是,当网络上所有的ECU发出了最后一帧NM Message(之后没有ECU再发送NM Message),大家都同步清零T_NM_TIMEROUT,如果设置的T_NM_TIMEROUT相同,会同步进入Prepare Sleep Mode阶段。
5.2 Prepare Sleep Mode
到这个阶段的时候,就是等待,让所有的节点有时间结束网络活动,所有的总线静默。然后在等待T_WAIT_BUS_SLEEP时间后,所有节点进入Bus-Sleep Mode
5.3 Bus-Sleep Mode
当ECU上电后会默认进入Bus-Sleep Mode,而且网络其实是在不断的试图进入到Bus-Sleep Mode中,但是由于有NM Message在总线上的传输,所以才能保留网络模式不进入Bus-Sleep Mode中。
大家可以想象成看门狗,NM Message就是不断的喂狗,一旦没有NM Message,就进Bus-Sleep Mode
5. ComM 通信管理模块
ComM就像一个通信的总开关,它可以管住CAN、LIN和以太网等相关的通信网络。
三种状态:
• Full Communication(全通信)
• Silent(静默状态)
• No Comunication(不通信)
ComM可以通过NM(Network Manager)去保持network的唤醒,同时也可以通过SM(State Manager)去激活通信,总而言之就像一个通信的总管。
唤醒源:
- 内部唤醒
- 外部唤醒
5.1 内部唤醒
5.2 外部唤醒
如果被外部唤醒,NM会进入被动状态(Passive)。然后当ComM进入Full Communication后也会默认往Ready Sleep状态里面去跑,不会去保持Network的唤醒状态
6. CanSM
CanSM主要是管理ECU内部的CAN节点的状态。
CanSM就是针对ECU的CAN功能的状态管理(覆盖到CanIf层),也就是可以控制芯片内置的CAN外设或者芯片外置的CAN收发器的状态
7.状态关联
- 只有当EcuM处于UP状态下才能保持ComM的Full Communication状态和Slient状态
- ComM能全权负责本ECU的通信状态,也就是管理SM模块,但是Network的状态不光是本ECU有关,还和其他的ECU有关,所以ComM 对NM是有一定的协调作用,并非全权管理 。
边栏推荐
- NC24840 [USACO 2009 Mar S]Look Up
- Multiprocess programming (I): basic concepts
- ftrace工具的介绍及使用
- form表单实例化
- Install docker and use docker to install MySQL
- Multi process programming (III): message queue
- [Luogu p4320] road meets (round square tree)
- Pytorch 20 realizes corrosion expansion based on pytorch
- UART、RS232、RS485、I2C和SPI的介绍
- 数组常用操作方法整理(包含es6)及详细使用
猜你喜欢
Win10 多种方式解决无法安装.Net3.5的问题
Understanding and application of least square method
如何系统学习机器学习
logback配置文件
[shutter] Introduction to the official example of shutter Gallery (project introduction | engineering construction)
使用jenkins之二Job
How SQLSEVER removes data with duplicate IDS
Markdown使用教程
Multiprocess programming (I): basic concepts
Automated defect analysis in electron microscopic images-论文阅读笔记
随机推荐
node_modules删不掉
Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径
Extension of flutter
NC50528 滑动窗口
Multiprocess programming (I): basic concepts
Basic use of shell script
[IELTS reading] Wang Xiwei reading P1 (reading judgment question)
百度智能云牵头打造智能云综合标准化平台
[shutter] image component (load network pictures | load static pictures | load local pictures | path | provider plug-in)
关于QByteArray存储十六进制 与十六进制互转
Pytorch 20 realizes corrosion expansion based on pytorch
pageoffice-之bug修改之旅
Explain in detail the significance of the contour topology matrix obtained by using the contour detection function findcontours() of OpenCV, and how to draw the contour topology map with the contour t
NC17059 队列Q
NC50965 Largest Rectangle in a Histogram
[Luogu p4320] road meets (round square tree)
Install docker and use docker to install MySQL
Tensorflow 2.x(keras)源码详解之第十五章:迁移学习与微调
Feature Engineering: summary of common feature transformation methods
为什么网站打开速度慢?