diff --git a/kernel/include/los_sched.h b/kernel/include/los_sched.h index aef3bd48..1ff08c89 100644 --- a/kernel/include/los_sched.h +++ b/kernel/include/los_sched.h @@ -93,11 +93,11 @@ VOID OsSchedTimerBaseReset(UINT64 currTime); STATIC INLINE UINT64 OsGetCurrSchedTimeCycle(VOID) { - if (g_sysSchedStartTime == 0) { - return g_sysSchedStartTime; + if (g_sysSchedStartTime != OS_64BIT_MAX) { + return (OsGetCurrSysTimeCycle() - g_sysSchedStartTime); } - return (OsGetCurrSysTimeCycle() - g_sysSchedStartTime); + return 0; } /** diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index d169fd72..6ee89119 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -60,13 +60,11 @@ STATIC UINT16 g_tickIntLock = 0; STATIC UINT64 g_tickStartTime = 0; STATIC UINT64 g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME; STATIC VOID (*SchedRealSleepTimeSet)(UINT64) = NULL; -UINT64 g_sysSchedStartTime = 0; +UINT64 g_sysSchedStartTime = OS_64BIT_MAX; STATIC VOID OsSchedSetStartTime(UINT64 currCycle) { - if (g_sysSchedStartTime == 0) { - g_sysSchedStartTime = currCycle; - } + g_sysSchedStartTime = currCycle; } UINT32 OsSchedRealSleepTimeSet(VOID (*func)(UINT64)) @@ -483,8 +481,10 @@ VOID OsSchedStart(VOID) g_losTask.newTask = newTask; g_losTask.runTask = g_losTask.newTask; - g_taskScheduled = 1; + /* Initialize the schedule timeline and enable scheduling */ + g_taskScheduled = TRUE; OsSchedSetStartTime(OsGetCurrSysTimeCycle()); + newTask->startTime = OsGetCurrSchedTimeCycle(); OsSchedTaskDeQueue(newTask); diff --git a/utils/los_compiler.h b/utils/los_compiler.h index fc36cc9f..d5b2cdee 100644 --- a/utils/los_compiler.h +++ b/utils/los_compiler.h @@ -354,6 +354,7 @@ typedef signed int INTPTR; #define OS_FAIL 1 #define OS_ERROR (UINT32)(-1) #define OS_INVALID (UINT32)(-1) +#define OS_64BIT_MAX (0xFFFFFFFFFFFFFFFFULL) #define asm __asm #ifdef typeof