[Autosar] DCM 模式规则函数

模式规则函数

模式规则函数

typedef P2FUNC(boolean, DCM_CODE, Dcm_ModeRuleFuncType) (Dcm_Ptr2LocalU8Type modeRuleRef /* OUT: The result NRC */);

extern CONST(Dcm_ModeRuleFuncType, DCM_CONST) Dcm_CfgModeMgrRules[2];

CONST(Dcm_ModeRuleFuncType, DCM_CONST) Dcm_CfgModeMgrRules[2]=
{
   Dcm_ModeRuleDefaultModeRule
  ,Dcm_ModeRuleDcmModeRule_JumpToBoot
};

函数实现:
DCM_LOCAL FUNC(boolean, DCM_CODE) Dcm_ModeRuleDefaultModeRule(Dcm_Ptr2LocalU8Type nrc) 
{
  DCM_IGNORE_UNREF_PARAM(nrc);  
  return TRUE;
}


DCM_LOCAL FUNC(boolean, DCM_CODE) Dcm_ModeRuleDcmModeRule_JumpToBoot(Dcm_Ptr2LocalU8Type nrc)
{
  if (Dcm_ModeCondGet_Dcm_Read_PP_Dcm_JumpToBootCond_JumpToBootCond() == RTE_MODE_JumpToBootCond_JumpToBootCondtMet)
  {
    return TRUE;
  }
  *nrc = ((uint8)(0x22u));
  return FALSE;
}

这段代码定义并实现了汽车诊断通信管理(DCM)模块中的模式规则函数。以下是对每个部分的详细解释:

1. 函数指针类型定义

typedef P2FUNC(boolean, DCM_CODE, Dcm_ModeRuleFuncType) (Dcm_Ptr2LocalU8Type modeRuleRef /* OUT: The result NRC */);
  • typedef P2FUNC(boolean, DCM_CODE, Dcm_ModeRuleFuncType): 定义了一个名为 Dcm_ModeRuleFuncType 的函数指针类型,该函数返回布尔值,并接受一个 Dcm_Ptr2LocalU8Type 类型的参数。
  • modeRuleRef: 这是函数的参数,用于输出结果的NRC(Negative Response Code)。

2. 外部常量数组声明

extern CONST(Dcm_ModeRuleFuncType, DCM_CONST) Dcm_CfgModeMgrRules[2];
  • Dcm_CfgModeMgrRules[2]: 声明了一个外部常量数组,包含两个 Dcm_ModeRuleFuncType 类型的元素。

3. 常量数组定义

CONST(Dcm_ModeRuleFuncType, DCM_CONST) Dcm_CfgModeMgrRules[2]=
{
   Dcm_ModeRuleDefaultModeRule,
   Dcm_ModeRuleDcmModeRule_JumpToBoot
};
  • 该数组包含两个函数指针,分别指向 Dcm_ModeRuleDefaultModeRule 和 Dcm_ModeRuleDcmModeRule_JumpToBoot 函数。

4. 函数实现

Dcm_ModeRuleDefaultModeRule
DCM_LOCAL FUNC(boolean, DCM_CODE) Dcm_ModeRuleDefaultModeRule(Dcm_Ptr2LocalU8Type nrc) 
{
  DCM_IGNORE_UNREF_PARAM(nrc);  
  return TRUE;
}
  • 这是一个简单的模式规则函数,忽略参数 nrc,并始终返回 TRUE
Dcm_ModeRuleDcmModeRule_JumpToBoot
DCM_LOCAL FUNC(boolean, DCM_CODE) Dcm_ModeRuleDcmModeRule_JumpToBoot(Dcm_Ptr2LocalU8Type nrc)
{
  if (Dcm_ModeCondGet_Dcm_Read_PP_Dcm_JumpToBootCond_JumpToBootCond() == RTE_MODE_JumpToBootCond_JumpToBootCondtMet)
  {
    return TRUE;
  }
  *nrc = ((uint8)(0x22u));
  return FALSE;
}
  • 这个函数检查某个条件是否满足(通过调用 Dcm_ModeCondGet_Dcm_Read_PP_Dcm_JumpToBootCond_JumpToBootCond 函数)。
  • 如果条件满足,返回 TRUE
  • 如果条件不满足,设置 nrc 为 0x22,并返回 FALSE

这段代码展示了如何配置和实现DCM模块中的模式规则函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值