diff --git a/kernel/include/los_sched.h b/kernel/include/los_sched.h index d3f75780..cf2528ed 100644 --- a/kernel/include/los_sched.h +++ b/kernel/include/los_sched.h @@ -45,9 +45,7 @@ extern "C" { extern UINT32 g_taskScheduled; typedef BOOL (*SchedScan)(VOID); -VOID OsSchedUpdateTimeBase(VOID); - -UINT64 OsGetCurrTimeCycle(VOID); +VOID OsSchedUpdateSchedTimeBase(VOID); UINT64 OsGetCurrSchedTimeCycle(VOID); diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index 00867fc7..a6c43597 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -59,7 +59,6 @@ STATIC UINT32 g_queueBitmap; STATIC UINT32 g_schedResponseID = 0; STATIC UINT64 g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME; -STATIC UINT64 g_schedStartTime; #if (LOSCFG_BASE_CORE_SCHED_SLEEP == 1) typedef struct { SchedSleepInit init; @@ -78,7 +77,7 @@ STATIC SchedSleep g_schedSleepCB; #if (LOSCFG_BASE_CORE_TICK_WTIMER == 0) STATIC UINT64 g_schedTimerBase; -VOID OsSchedUpdateTimeBase(VOID) +VOID OsSchedUpdateSchedTimeBase(VOID) { UINT32 period = 0; @@ -87,8 +86,12 @@ VOID OsSchedUpdateTimeBase(VOID) } #endif -UINT64 OsGetCurrTimeCycle(VOID) +UINT64 OsGetCurrSchedTimeCycle(VOID) { + if (!g_taskScheduled) { + return 0; + } + #if (LOSCFG_BASE_CORE_TICK_WTIMER == 1) return HalGetTickCycle(NULL); #else @@ -111,15 +114,6 @@ UINT64 OsGetCurrTimeCycle(VOID) #endif } -UINT64 OsGetCurrSchedTimeCycle(VOID) -{ - if (!g_taskScheduled) { - return 0; - } - - return OsGetCurrTimeCycle() - g_schedStartTime; -} - STATIC INLINE VOID OsTimeSliceUpdate(LosTaskCB *taskCB, UINT64 currTime) { LOS_ASSERT(currTime >= taskCB->startTime); @@ -177,7 +171,7 @@ STATIC INLINE VOID OsSchedSetNextExpireTime(UINT64 startTime, UINT32 responseID, g_schedResponseTime = nextExpireTime; #if (LOSCFG_BASE_CORE_TICK_WTIMER == 0) - g_schedTimerBase = OsGetCurrTimeCycle(); + g_schedTimerBase = OsGetCurrSchedTimeCycle(); #endif HalSysTickReload(nextResponseTime); } @@ -459,7 +453,6 @@ VOID OsSchedStart(VOID) OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, newTask->startTime + newTask->timeSlice); PRINTK("Entering scheduler\n"); - g_schedStartTime = OsGetCurrTimeCycle(); g_taskScheduled = 1; } @@ -510,25 +503,21 @@ VOID LOS_SchedTickHandler(VOID) UINT32 intSave = LOS_IntLock(); - if (g_taskScheduled) { - if (g_schedResponseID == OS_INVALID) { - if (g_swtmrScan != NULL) { - needSched = g_swtmrScan(); - } - - needSched |= OsSchedScanTimerList(); + if (g_schedResponseID == OS_INVALID) { + if (g_swtmrScan != NULL) { + needSched = g_swtmrScan(); } - g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME; - if (needSched && LOS_CHECK_SCHEDULE) { - HalTaskSchedule(); - } else { - currTime = OsGetCurrSchedTimeCycle(); - OsTimeSliceUpdate(g_losTask.runTask, currTime); - OsSchedUpdateExpireTime(currTime); - } + needSched |= OsSchedScanTimerList(); + } + + g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME; + if (g_taskScheduled && needSched && LOS_CHECK_SCHEDULE) { + HalTaskSchedule(); } else { - OsSchedUpdateExpireTime(OsGetCurrSchedTimeCycle()); + currTime = OsGetCurrSchedTimeCycle(); + OsTimeSliceUpdate(g_losTask.runTask, currTime); + OsSchedUpdateExpireTime(currTime); } LOS_IntRestore(intSave); diff --git a/kernel/src/los_tick.c b/kernel/src/los_tick.c index 6f991a4f..023abd82 100644 --- a/kernel/src/los_tick.c +++ b/kernel/src/los_tick.c @@ -53,7 +53,7 @@ extern VOID platform_tick_handler(VOID); LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) { #if (LOSCFG_BASE_CORE_TICK_WTIMER == 0) - OsSchedUpdateTimeBase(); + OsSchedUpdateSchedTimeBase(); #endif #if (LOSCFG_BASE_CORE_TICK_HW_TIME == 1) @@ -78,7 +78,7 @@ Return : current tick *****************************************************************************/ LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID) { - return OsGetCurrTimeCycle() / OS_CYCLE_PER_TICK; + return OsGetCurrSchedTimeCycle() / OS_CYCLE_PER_TICK; } /*****************************************************************************