From 509cf59befb40839a376be31958d615f066c66fd Mon Sep 17 00:00:00 2001 From: zhushengle Date: Sat, 14 Aug 2021 11:06:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=A5g=5FsysSchedStartTime=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=BA0=E5=88=A4=E6=96=AD=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=BD=B4=E6=98=AF=E5=90=A6=E7=94=9F=E6=95=88=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E6=9E=81=E9=99=90=E5=9C=BA=E6=99=AF=E5=AF=BC=E8=87=B4=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E6=97=B6=E9=97=B4=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 初始化调度时间不以g_sysSchedStartTime是否为0为界限,而以g_sysSchedStartTime是否为64位最大值, 为界限, 避免特殊以下场景:调度开启时系统时间为0,导致初始化的g_sysSchedStartTime还是0,导致 调度启动后获取的调度时间轴始终为0. Close #I45HP5 Signed-off-by: zhushengle Change-Id: Ie0ef4e7d149f09ac466c649c0f2d6538f5322439 --- kernel/include/los_sched.h | 6 +++--- kernel/src/los_sched.c | 10 +++++----- utils/los_compiler.h | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) 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