diff --git a/kernel/base/include/los_sched_pri.h b/kernel/base/include/los_sched_pri.h index 698cf545e387973042e4f8b0b31abbdf9a0b1efb..980193690a4f4541cc6e1c7056d128fa1b4a442c 100644 --- a/kernel/base/include/los_sched_pri.h +++ b/kernel/base/include/los_sched_pri.h @@ -56,11 +56,11 @@ extern UINT64 g_sysSchedStartTime; STATIC INLINE UINT64 OsGetCurrSchedTimeCycle(VOID) { - if (g_sysSchedStartTime == 0) { - return g_sysSchedStartTime; + if (g_sysSchedStartTime != OS_64BIT_MAX) { + return (HalClockGetCycles() - g_sysSchedStartTime); } - return (HalClockGetCycles() - g_sysSchedStartTime); + return 0; } STATIC INLINE VOID OsSchedIrqUpdateUsedTime(VOID) diff --git a/kernel/base/sched/sched_sq/los_sched.c b/kernel/base/sched/sched_sq/los_sched.c index 57b48c99c8dff5d4f81ae2698959872e495b23a3..c3338fb0dd6da8044c6a45d461ca84d4cfb4dde9 100644 --- a/kernel/base/sched/sched_sq/los_sched.c +++ b/kernel/base/sched/sched_sq/los_sched.c @@ -48,7 +48,6 @@ #endif #define OS_32BIT_MAX 0xFFFFFFFFUL -#define OS_64BIT_MAX 0xFFFFFFFFFFFFFFFFULL #define OS_SCHED_FIFO_TIMEOUT 0x7FFFFFFF #define OS_PRIORITY_QUEUE_NUM 32 #define PRIQUEUE_PRIOR0_BIT 0x80000000U @@ -73,7 +72,7 @@ typedef struct { STATIC Sched *g_sched = NULL; STATIC UINT64 g_schedTickMaxResponseTime; -UINT64 g_sysSchedStartTime = 0; +UINT64 g_sysSchedStartTime = OS_64BIT_MAX; #ifdef LOSCFG_SCHED_TICK_DEBUG #define OS_SCHED_DEBUG_DATA_NUM 1000 @@ -253,7 +252,7 @@ UINT32 OsSchedSetTickTimerType(UINT32 timerType) STATIC VOID OsSchedSetStartTime(UINT64 currCycle) { - if (g_sysSchedStartTime == 0) { + if (g_sysSchedStartTime == OS_64BIT_MAX) { g_sysSchedStartTime = currCycle; } } @@ -889,7 +888,9 @@ VOID OsSchedStart(VOID) SCHEDULER_LOCK(intSave); - OsTickStart(); + if (cpuid == 0) { + OsTickStart(); + } LosTaskCB *newTask = OsGetTopTask(); LosProcessCB *newProcess = OS_PCB_FROM_PID(newTask->processID); diff --git a/kernel/include/los_typedef.h b/kernel/include/los_typedef.h index fab5a78015c604cda886b9d8038730248ed7d404..18ec7af44625095ba3a5d1d92fbd4ccaefc92e49 100644 --- a/kernel/include/los_typedef.h +++ b/kernel/include/los_typedef.h @@ -188,6 +188,7 @@ typedef size_t BOOL; #define OS_ERROR (UINT32)(-1) #define OS_INVALID (UINT32)(-1) #define OS_INVALID_VALUE ((UINT32)0xFFFFFFFF) +#define OS_64BIT_MAX 0xFFFFFFFFFFFFFFFFULL #define asm __asm #ifdef typeof