!193 fix: 延时队列为NULL时,返回的响应时间为64位最大值,导致无法更新tick timer的响应周期
Merge pull request !193 from zhushengle/sched
This commit is contained in:
commit
0f7d2fcf07
|
@ -42,6 +42,8 @@ extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#define OS_SCHED_MAX_RESPONSE_TIME (UINT64)(((UINT64)-1) - 1U)
|
||||||
|
|
||||||
extern UINT32 g_taskScheduled;
|
extern UINT32 g_taskScheduled;
|
||||||
typedef BOOL (*SchedScan)(VOID);
|
typedef BOOL (*SchedScan)(VOID);
|
||||||
|
|
||||||
|
|
|
@ -41,12 +41,10 @@ extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
#define OS_64BIT_MAX 0xFFFFFFFFFFFFFFFFULL
|
|
||||||
#define OS_PRIORITY_QUEUE_NUM 32
|
#define OS_PRIORITY_QUEUE_NUM 32
|
||||||
#define PRIQUEUE_PRIOR0_BIT 0x80000000U
|
#define PRIQUEUE_PRIOR0_BIT 0x80000000U
|
||||||
#define OS_SCHED_TIME_SLICES ((LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE)
|
#define OS_SCHED_TIME_SLICES ((LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE)
|
||||||
#define OS_TIME_SLICE_MIN (INT32)((50 * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE) /* 50us */
|
#define OS_TIME_SLICE_MIN (INT32)((50 * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE) /* 50us */
|
||||||
#define OS_SCHED_MAX_RESPONSE_TIME (UINT64)(OS_64BIT_MAX - 1U)
|
|
||||||
#define OS_TICK_RESPONSE_TIME_MAX LOSCFG_BASE_CORE_TICK_RESPONSE_MAX
|
#define OS_TICK_RESPONSE_TIME_MAX LOSCFG_BASE_CORE_TICK_RESPONSE_MAX
|
||||||
#if (LOSCFG_BASE_CORE_TICK_RESPONSE_MAX == 0)
|
#if (LOSCFG_BASE_CORE_TICK_RESPONSE_MAX == 0)
|
||||||
#error "Must specify the maximum value that tick timer counter supports!"
|
#error "Must specify the maximum value that tick timer counter supports!"
|
||||||
|
@ -184,7 +182,7 @@ VOID OsSchedUpdateExpireTime(UINT64 startTime)
|
||||||
INT32 timeSlice = (runTask->timeSlice <= OS_TIME_SLICE_MIN) ? OS_SCHED_TIME_SLICES : runTask->timeSlice;
|
INT32 timeSlice = (runTask->timeSlice <= OS_TIME_SLICE_MIN) ? OS_SCHED_TIME_SLICES : runTask->timeSlice;
|
||||||
endTime = startTime + timeSlice;
|
endTime = startTime + timeSlice;
|
||||||
} else {
|
} else {
|
||||||
endTime = OS_SCHED_MAX_RESPONSE_TIME;
|
endTime = OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK;
|
||||||
}
|
}
|
||||||
OsSchedSetNextExpireTime(startTime, runTask->taskID, endTime);
|
OsSchedSetNextExpireTime(startTime, runTask->taskID, endTime);
|
||||||
}
|
}
|
||||||
|
@ -488,7 +486,7 @@ BOOL OsSchedTaskSwitch(VOID)
|
||||||
if (newTask->taskID != g_idleTaskID) {
|
if (newTask->taskID != g_idleTaskID) {
|
||||||
endTime = newTask->startTime + newTask->timeSlice;
|
endTime = newTask->startTime + newTask->timeSlice;
|
||||||
} else {
|
} else {
|
||||||
endTime = OS_SCHED_MAX_RESPONSE_TIME;
|
endTime = OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK;
|
||||||
}
|
}
|
||||||
OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, endTime);
|
OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, endTime);
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ STATIC INLINE UINT64 OsGetSortLinkNextExpireTime(SortLinkAttribute *sortHeader,
|
||||||
LOS_DL_LIST *list = head->pstNext;
|
LOS_DL_LIST *list = head->pstNext;
|
||||||
|
|
||||||
if (LOS_ListEmpty(head)) {
|
if (LOS_ListEmpty(head)) {
|
||||||
return (UINT64)-1;
|
return OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK;
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
Loading…
Reference in New Issue