模式规则函数
模式规则函数
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模块中的模式规则函数。