AUTOSAR Davinci 达芬奇BswM代码分析

BswM_RequestMode

主要就是分析一下模式请求的过程,这个过程涉及到模式的规则的执行,包括模式的仲裁以及模式的处理。

代码的调用结构

在这里插入图片描述

源码解析

在这里插入图片描述

1、查找用户索引

for(userHandle = 0; userHandle < BswM_GetSizeOfGenericState(); userHandle++)
{
if (BswM_GetExternalIdOfGenericMapping(userHandle) == requesting_user)
{


这里匹配userHandle是否在我们的配置表里面,userHandle指的是配置表格的索引值,requesting_user是在配置过程中生成的一个ID号,比如ESH_State的ID号就是230。配置表如下所示:
在这里插入图片描述在这里插入图片描述

2、存储请求的状态

BswM_SetGenericState(userHandle, requested_mode);
userHandle代表数组的索引,requested_mode请求的状态存储到BswM_GenericState里面
在这里插入图片描述

3、开始仲裁

    BSWM_CALL_IMMEDIATE(BswM_GetImmediateUserStartIdxOfGenericMapping(userHandle), BswM_GetImmediateUserEndIdxOfGenericMapping(userHandle), BSWM_REQUESTMODE_ID);

三个入参函数:
startIdx对应的该ModeRequestPort的规则起始点
endIdx对应的该ModeRequestPort的规则结束点
比如BswM_GENERIC_ESH_State对应的Id是230,startIdx为3,endidx是2
在这里插入图片描述

4、存储立刻仲裁的请求

BswM_GENERIC_ESH_State对应的start是2,结束是3,其实就是判断对应的规则仲裁是否处于IDLE状态,也就是数组的第二个元素的值的状态,如果是IDLE状态,设置对应的queue的状态,并将BswM_QueueWritten设置为TRUE。
在这里插入图片描述
在这里插入图片描述

5、处理请求

轮询队列请求,是否存在BSWM_REQUEST_QUEUED状态的规则,刚才设置存储的就是这个状态

在这里插入图片描述
根据对应的immediateUserIndex,也就是刚才的start的索引2,找到对应的ESH_State对应的相关的rule,ESH_State对应的RulesIndStartIdx为6,RulesIndEndIdx为14
在这里插入图片描述
BswM_GetRulesInd(ruleIndex)
根据6-14的索引找到对应的rule所在的索引
在这里插入图片描述
actionListIndex = BswM_GetFctPtrOfRules(BswM_GetRulesInd(ruleIndex))(); /* SBSW_BSWM_RULEFCTPTR */
根据BswM_GetRulesInd(ruleIndex)获取到的索引,找到对应的rule,并执行对应的函数。
在这里插入图片描述
比如目前是的状态仲裁的是BswM_Rule_ESH_InitToWakeup,对应的rule逻辑表达式为ESH_State是否等于ESH_INIT,如果为TRUE,则仲裁成立,返回对应的ActionList的索引。
在这里插入图片描述
在这里插入图片描述
BswM_SetActionListQueue(actionListIndex, BSWM_ACTIONLIST_PENDING);
BswM_SetModeRequestQueue(immediateUserIndex, BSWM_REQUEST_PROCESSED);
如果仲裁成立,返回actionListIndex,将需要执行的ActionList的索引存储下来,为后面执行做准备。

6、执行ActionList

根据actionlist的索引找到对应的actionlist
actionlist会包含配置的action,调用对应的action
在这里插入图片描述
BswM_ActionList_ESH_AL_InitToWakeup
在这里插入图片描述
在这里插入图片描述

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

美好生活丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值