16.AUTOSAR 系统服务(三):BswM详解(1)

目录

1.什么是模式管理

1.1 模式定义

 1.2 模式管理定义

2.BswM在AUTOSAR的角色

3.小结 


1.什么是模式管理

在AUSOSAR文档里, 模式管理(Mode Management)的所有关联模块有:EcuM、WdgM、ComM和BswM。他们分别承担着如下作用:

  • EcuM:控制AUTOSAR BSW模块、OS等的启动;
  • WdgM:根据控制流状态和Alive状态喂狗;
  • ComM:管理网络状态和资源
  • BswM:负责模式处理、仲裁等

这就有点奇怪,上述四个模块干着不同的事情,为什么会统一起来叫模式管理Cluster呢?

那么究竟什么叫做模式管理(Mode Management)?我们一步一步来看。

1.1 模式定义

根据Software Component Template描述,Mode表示的是一个全局变量的当前状态

这么说就很简单啦,我们之前讲的EcuM模块有一个状态机,在代码中有一个全局变量EcuM_ModuleState用于表示当前EcuM的状态,这个可以把它叫做模式。常见模式有:

#define ECUM_STATE_STARTUP                                  (0x10u)
#define ECUM_STATE_STARTUP_ONE                              (0x11u)
#define ECUM_STATE_STARTUP_TWO                              (0x12u)
#define ECUM_STATE_WAKEUP                                   (0x20u)
#define ECUM_STATE_RUN                                      (0x30u)
#define ECUM_STATE_GO_SLEEP                                 (0x49u)

这也就意味着,Mode在不同模块、不同场景下可以有不同作用

 例如做过通信栈的同学可能对ComM各个状态请求比较熟悉,如:

# define COMM_NO_COM_REQUEST_PENDING       (1u)
# define COMM_FULL_COM_NETWORK_REQUESTED   (2u)
# define COMM_FULL_COM_READY_SLEEP         (3u)
# define COMM_SILENT_COM                   (4u)

做过BswM的可能对BswM的Mode很熟悉,如:

#define BSWM_GENERICVALUE_ESH_State_ESH_INIT            0x0000u 
#define BSWM_GENERICVALUE_ESH_State_ESH_POST_RUN        0x0002u 
#define BSWM_GENERICVALUE_ESH_State_ESH_PREP_SHUTDOWN   0x0003u 
#define BSWM_GENERICVALUE_ESH_State_ESH_READ_NVM        0x0008u 
#define BSWM_GENERICVALUE_ESH_State_ESH_RUN             0x0001u 
#define BSWM_GENERICVALUE_ESH_State_ESH_SHUTDOWN        0x0005u 
#define BSWM_GENERICVALUE_ESH_State_ESH_SLEEP           0x0007u 
#define BSWM_GENERICVALUE_ESH_State_ESH_WAIT_FOR_NVM    0x0004u 

 1.2 模式管理定义

所谓模式管理,那就是管理某些模块的当前状态,并且当前状态的进入会影响到不同的模块的行为。举个例子,当BswM准备下电时,它会进入到PreShutdown,在这种模式下,通常会影响到通信:ECU不外发报文;会影响到NvM:准备下电前存储DTC、里程数据等。

从辩证角度就分为模式请求者、模式管理者和模式使用者,如下图:

模式请求者通过Sender或者Client向模式管理者发出模式请求,模式管理者进行条件仲裁后进入到请求的模式,同时通过S\R接口通知User,模式变了,准备做该模式下定义的动作吧。

2.BswM在AUTOSAR的角色

那么BswM这个模块在AUTOSAR中扮演了什么角色呢?

我们首先来看下,没有BswM的时候系统交互应该是怎么样的。

当系统进行上电后,EcuM首先运行,进行一系列外设初始化工作后,它想要从进行数据初始化,此时就要从NvM中读取数据;如果想要开启诊断的操作循环,此时就要调用DCM的相关接口;如果想要开启通信,就要调用ComM,ComM进而继续调用CanSM,那么上电时的拓扑结构就如下图:

那如果运行时, Dem根据状态的不同要调用NvM实时存某些数据,DCM想要关闭某些通信总线,那么就会变成如下:

可以看到,随着模块的增加,代码接口、复杂程序和耦合性逐步上升,那么可不可以有一个模块来统一管理这些模式,当模式出现变化时通知关联模块做相应动作呢?BswM就站了出来,具体如下:

当EcuM完成启动后,将控制权交由BswM,BswM根据当前自己的状态、仲裁预置的条件和规则来通知不同的模块进行关联动作。

例如当BswM完成初始化,进入到BswM_RUN状态后,可以判断当前是否收到NM报文且ECU板级电压正常,那么就可以通知ComM准备开始发报文了,通知SWC电压正常,你可以正常干活啦。 

3.小结 

通过一系列复杂的语言描述,我发现最后还是图好使,基本上BswM就是干示例里面的活,只是我们在配置的时候要考虑的东西很多,例如DCM相关条件、BswM状态、NvM状态、BusSM状态、唤醒源等等,总的来说,这块很灵活,但是难度不大,做的时候画图基本上可以完成。下一篇我们就来画图

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AutoSarBswM是指AutoSar架构下的模式管理模块。它是AutoSar的一个标准模块,用于管理系统中的不同模式。在AutoSar中,模式通常用于描述系统或应用程序的不同状态或行为。BswM模块负责监控系统的当前模式,并根据预定义的策略和条件来切换模式。 BswM与各个Software Component (SW-C)和各个Basic Software (BSW)模块之间进行交互。它可以与其他模块通过AutoSar的标准接口进行通信,以便获取当前系统状态和执行相应的模式切换操作。例如,BswM可以与EcuM模块和WdgM模块进行交互,以实现对电子控制单元 (ECU)和看门狗 (Watchdog)的管理。 在Davinci Configurator中,通常可以通过默认选项自动配置BswM模块。工具还支持用户根据特殊需求进行自定义配置。因此,对于BswM模块的具体实现机制和配置方法,可以在Davinci Configurator中进行详细了解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Autosar模式管理系列介绍01-BswM](https://blog.csdn.net/initiallizer/article/details/121256729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [AUTOSAR基础篇之BswM](https://blog.csdn.net/king110108/article/details/119273130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值