void OSTaskSwHook (void) { #if OS_CFG_TASK_PROFILE_EN > 0u CPU_TS ts; #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN CPU_TS int_dis_time; #endif #if (OS_CPU_ARM_FP_EN == DEF_ENABLED) if ((OSTCBCurPtr->Opt & OS_OPT_TASK_SAVE_FP) != (OS_OPT)0) { OS_CPU_FP_Reg_Push(OSTCBCurPtr->StkPtr); } if ((OSTCBHighRdyPtr->Opt & OS_OPT_TASK_SAVE_FP) != (OS_OPT)0) { OS_CPU_FP_Reg_Pop(OSTCBHighRdyPtr->StkPtr); } #endif #if OS_CFG_APP_HOOKS_EN > 0u if (OS_AppTaskSwHookPtr != (OS_APP_HOOK_VOID)0) { (*OS_AppTaskSwHookPtr)(); } #endif #if (defined(TRACE_CFG_EN) && (TRACE_CFG_EN > 0u)) TRACE_OS_TASK_SWITCHED_IN(OSTCBHighRdyPtr); /* Record the event. */ #endif #if OS_CFG_TASK_PROFILE_EN > 0u ts = OS_TS_GET(); if (OSTCBCurPtr != OSTCBHighRdyPtr) { OSTCBCurPtr->CyclesDelta = ts - OSTCBCurPtr->CyclesStart; OSTCBCurPtr->CyclesTotal += (OS_CYCLES)OSTCBCurPtr->CyclesDelta; } OSTCBHighRdyPtr->CyclesStart = ts; #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN int_dis_time = CPU_IntDisMeasMaxCurReset(); /* Keep track of per-task interrupt disable time */ if (OSTCBCurPtr->IntDisTimeMax < int_dis_time) { OSTCBCurPtr->IntDisTimeMax = int_dis_time; } #endif #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u /* Keep track of per-task scheduler lock time */ if (OSTCBCurPtr->SchedLockTimeMax < OSSchedLockTimeMaxCur) { OSTCBCurPtr->SchedLockTimeMax = OSSchedLockTimeMaxCur; } OSSchedLockTimeMaxCur = (CPU_TS)0; /* Reset the per-task value */ #endif }
void OSTaskSwHook (void) { #if (OS_CPU_ARM_FP_EN > 0u) if ((OSTCBCur->OSTCBOpt & OS_TASK_OPT_SAVE_FP) != (INT16U)0) { OS_CPU_FP_Reg_Push(OSTCBCur->OSTCBStkPtr); } if ((OSTCBHighRdy->OSTCBOpt & OS_TASK_OPT_SAVE_FP) != (INT16U)0) { OS_CPU_FP_Reg_Pop(OSTCBHighRdy->OSTCBStkPtr); } #endif #if OS_APP_HOOKS_EN > 0u App_TaskSwHook(); #endif }