模式管理是AUTOSAR中的一个难点,也可以说是最庞杂的一块。因为模式管理贯穿整个CP Autosar流程,几乎所有模块都跟BSWM发生着联系。
BswM作为一个独立的模块,其代码是在BswM_MainFunction()中周期执行的,那么它的输入/激励是什么?
答案:Port!
在ETAS的ISOLAR软件中BswM可用的Port分以下这些类.
我们把Port信号的改变理解成触发BswM动作的信息,从Port开始追朔,按图索骥,则可将BswM贯穿起来。我举个最简单的场景作为例子:
SWC发起请求 -> 改变ModeRequestPort信息 -> 构成ModeCondition -> 构成LogicalExpression -> 构成Rules -> 触发ActionLists -> 包含Actions。
例子1 - BswMSwcModeRequest类型的请求
该Port请求来源是SWC,也就是说SWC控制着它。
第一步 - 请求/触发源
在ModeRequestPort上单击右键 选择BswM Rule Trace View, 在弹出的视图里就给出了该Port对应的各个配置项,逻辑是很清晰的。
第二步 - 条件
在BswM Rule Trace View视图中点击ModeCondition,进入BswM_MC_BswM_PostRun这个配置项:
这个配置项简单来来说就是一行语句
BswM_MRP_SwcModeRequest == ECUM_STATE_POST_RUN
第三步 - 逻辑表达式
在BswM Rule Trace View视图上点击LogicalExpression视图, 进入BswM_LE_PostRun这个配置项:
该配置项只包含了BswM_MC_BswM_PostRun这一个条件,所以它依然是一行语句
BswM_MRP_SwcModeRequest == ECUM_STATE_POST_RUN
第四步 - 规则
在BswM Rule Trace View视图上点击Rules视图, 进入BswM_AR_PostRun这个配置项,
可见这个规则就是,使用BswM_LE_PostRun这个表达式,当其为真的时候触发BswM_AL_BswMSwitchPrepShutdown这个动作组。简化成伪代码就是:
if(BswM_MRP_SwcModeRequest== ECUM_STATE_POST_RUN)
{
BswM_AL_BswMSwitchPrepShutdown();
}
else
{
/* Do Nothing… */
}
第五步 - 动作列表
在BswM Rule Trace View视图上点击ActionList视图,进入BswM_AL_BswMSwitchPrepShutdown配置项:
第六步 - 动作
在视图上点击Action视图,进入各个动作详细配置,一看就懂了。
做个总结
原文:https://blog.csdn.net/m0_58346868/article/details/129558935