AUTOSAR 4.2.2版本中Dem 操作循环(Operation Cycle)的开启和关闭
在AUTOSAR 4.2.2版本的Dem模块中,是通过下面这个接口对整个故障诊断的操作循环(OperationCycle)进行开启和关闭的
#define DEM_CYCLE_STATE_START (0U)
#define DEM_CYCLE_STATE_END (1U)
Dem_SetOperationCycleState(Dem_OperationCycleIdType OperationCycleId,Dem_OperationCycleStateType CycleState)
一般情况下我们需要在ECU上电时开启操作循环,例如可以在软件进入OS_MAIN()
后,在执行EcuM_Init() 前开启操作循环
OS_MAIN()
{
/* Enter AUTOSAR world after TISCI initialization setup. */
Dem_SetOperationCycleState(0u, 0);
/*Invoking the ECUM Init for ECU Initialization, never return */
EcuM_Init();
}
在ECU下电时关闭操作循环,这个操作我们可以通过在BswM中进行,
Dem_SetOperationCycleState(0, DEM_CYCLE_STATE_END);
或者在EcuM_GoOffOne(void)
中进行操作循环的关闭操作,之后再执行
Dem_Shutdown()
void EcuM_GoOffOne(void)
{
#if(ECUM_CFG_MULTICORE_ENABLED == STD_ON)
/* MR12 RULE 8.4 VIOLATION: The declaration of GetCoreID is expected from Os */
if(GetCoreID() == ECUM_CFG_STARTUP_CORE)
{
#endif/* ECUM_CFG_MULTICORE_ENABLED */
(void)Rte_Stop();
Dem_SetOperationCycleState(0,DEM_CYCLE_STATE_END);
(void)Dem_Shutdown();
#if(ECUM_CFG_MULTICORE_ENABLED == STD_ON)
}
#endif/* ECUM_CFG_MULTICORE_ENABLED */
}