当前位置:网站首页>【AutoSAR 十二 模式管理】
【AutoSAR 十二 模式管理】
2022-07-29 19:04: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是有一定的协调作用,并非全权管理 。
边栏推荐
- 成都 | 转行软件测试,从零收入到月薪过万,人生迎来新转折...
- etcd实现大规模服务治理应用实战
- Test push | Ali Fliggy, Baidu, 58 (recruitment), Zhihu, Huanxin Network, Baiguoyuan, Ali (Lazada), Shenzhicheng, Yuanrong Qixing are recruiting
- 洪九果品、百果园抢滩港股,卖水果是门好生意吗?
- Experience Sharing | Tips for Writing Easy-to-Use Online Product Manuals
- Small application components
- R语言时间序列数据可视化: 使用plot函数可视化单序列时间序列数据、多序列时间序列数据并指定不同时间序列的线条类型(lty)
- 函数的声明与作用域
- 测试基础:Nosql数据库之Redis
- error TS1219: Experimental support for decorators解决
猜你喜欢
随机推荐
Chapter 01 Installation and use of MySQL under Linux [1. MySQL Architecture] [MySQL Advanced]
2.5w字 + 36 张图爆肝操作系统面试题 学不吐你
优雅实现经典的生产者消费者模式
H264码流RTP封装方式详解
First-line big factory software test interview questions and answer analysis, the strongest version of 2022...
shell 图形化跳板机
成都 | 转行软件测试,从零收入到月薪过万,人生迎来新转折...
AI全流程开发难题破解之钥
大中型网站列表页翻页过多怎么优化?
Mobile Banking Experience Test: How to Get the Real User Experience
高速无源链路阻抗匹配套路
Web—信息收集(非常全)
手机银行体验性测试:如何获取用户真实感受
centos8安装mysql8.0.28
面试突击:为什么 TCP 需要 3 次握手?
中天钢铁在 GPS、 AIS 调度中使用 TDengine
LeetCode 1047 删除字符串中的所有相邻重复项
记录一个相当坑爹的WSL局域网访问问题
Go 语言如何读取 excel 测试数据,简单易学
每日优鲜“坠落”,生鲜前置仓的面子和里子