diff --git a/kernel/include/los_sortlink.h b/kernel/include/los_sortlink.h index a4b1d2b5..66d0f006 100644 --- a/kernel/include/los_sortlink.h +++ b/kernel/include/los_sortlink.h @@ -56,7 +56,10 @@ typedef struct { } SortLinkAttribute; extern SortLinkAttribute g_taskSortLink; + +#if (LOSCFG_BASE_CORE_SWTMR == 1) extern SortLinkAttribute g_swtmrSortLink; +#endif #define OS_SORT_LINK_INVALID_TIME ((UINT64)-1) #define SET_SORTLIST_VALUE(sortList, value) (((SortLinkList *)(sortList))->responseTime = (value)) @@ -98,7 +101,11 @@ STATIC INLINE UINT64 GetSortLinkNextExpireTime(SortLinkAttribute *sortHead, UINT STATIC INLINE UINT64 OsGetNextExpireTime(UINT64 startTime, UINT32 tickPrecision) { UINT64 taskExpireTime = GetSortLinkNextExpireTime(&g_taskSortLink, startTime, tickPrecision); +#if (LOSCFG_BASE_CORE_SWTMR == 1) UINT64 swtmrExpireTime = GetSortLinkNextExpireTime(&g_swtmrSortLink, startTime, tickPrecision); +#else + UINT64 swtmrExpireTime = taskExpireTime; +#endif return (taskExpireTime < swtmrExpireTime) ? taskExpireTime : swtmrExpireTime; } diff --git a/kernel/include/los_task.h b/kernel/include/los_task.h index 786f4a31..ce8441df 100644 --- a/kernel/include/los_task.h +++ b/kernel/include/los_task.h @@ -1584,7 +1584,9 @@ extern UINT32 g_idleTaskID; * Software timer task ID. * */ +#if (LOSCFG_BASE_CORE_SWTMR == 1) extern UINT32 g_swtmrTaskID; +#endif /** * @ingroup los_task diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index aaa33357..cb72e290 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -509,7 +509,9 @@ VOID OsSchedStart(VOID) OsTickSysTimerStartTimeSet(newTask->startTime); +#if (LOSCFG_BASE_CORE_SWTMR == 1) OsSwtmrResponseTimeReset(newTask->startTime); +#endif /* Initialize the schedule timeline and enable scheduling */ g_taskScheduled = TRUE; diff --git a/kernel/src/los_sortlink.c b/kernel/src/los_sortlink.c index 3ef717f3..1cb5132c 100644 --- a/kernel/src/los_sortlink.c +++ b/kernel/src/los_sortlink.c @@ -40,7 +40,10 @@ extern "C" { #endif /* __cplusplus */ SortLinkAttribute g_taskSortLink; + +#if (LOSCFG_BASE_CORE_SWTMR == 1) SortLinkAttribute g_swtmrSortLink; +#endif UINT32 OsSortLinkInit(SortLinkAttribute *sortLinkHead) { @@ -85,8 +88,10 @@ VOID OsAdd2SortLink(SortLinkList *node, UINT64 startTime, UINT32 waitTicks, Sort if (type == OS_SORT_LINK_TASK) { sortLinkHead = &g_taskSortLink; +#if (LOSCFG_BASE_CORE_SWTMR == 1) } else if (type == OS_SORT_LINK_SWTMR) { sortLinkHead = &g_swtmrSortLink; +#endif } else { LOS_Panic("Sort link type error : %u\n", type); } @@ -128,18 +133,22 @@ STATIC INLINE VOID SortLinkNodeTimeUpdate(SortLinkAttribute *sortLinkHead, UINT3 VOID OsSortLinkResponseTimeConvertFreq(UINT32 oldFreq) { SortLinkAttribute *taskHead = &g_taskSortLink; - SortLinkAttribute *swtmrHead = &g_swtmrSortLink; - SortLinkNodeTimeUpdate(taskHead, oldFreq); + +#if (LOSCFG_BASE_CORE_SWTMR == 1) + SortLinkAttribute *swtmrHead = &g_swtmrSortLink; SortLinkNodeTimeUpdate(swtmrHead, oldFreq); +#endif } SortLinkAttribute *OsGetSortLinkAttribute(SortLinkType type) { if (type == OS_SORT_LINK_TASK) { return &g_taskSortLink; +#if (LOSCFG_BASE_CORE_SWTMR == 1) } else if (type == OS_SORT_LINK_SWTMR) { return &g_swtmrSortLink; +#endif } PRINT_ERR("Invalid sort link type!\n"); diff --git a/kernel/src/los_task.c b/kernel/src/los_task.c index 5ec570a1..58d836b3 100644 --- a/kernel/src/los_task.c +++ b/kernel/src/los_task.c @@ -102,7 +102,11 @@ LITE_OS_SEC_BSS LosTask g_losTask; LITE_OS_SEC_BSS UINT16 g_losTaskLock; LITE_OS_SEC_BSS UINT32 g_taskMaxNum; LITE_OS_SEC_BSS UINT32 g_idleTaskID; + +#if (LOSCFG_BASE_CORE_SWTMR == 1) LITE_OS_SEC_BSS UINT32 g_swtmrTaskID; +#endif + LITE_OS_SEC_DATA_INIT LOS_DL_LIST g_losFreeTask; LITE_OS_SEC_DATA_INIT LOS_DL_LIST g_taskRecycleList; LITE_OS_SEC_BSS BOOL g_taskScheduled = FALSE; @@ -118,8 +122,10 @@ STATIC_INLINE UINT32 OsCheckTaskIDValid(UINT32 taskID) UINT32 ret = LOS_OK; if (taskID == g_idleTaskID) { ret = LOS_ERRNO_TSK_OPERATE_IDLE; +#if (LOSCFG_BASE_CORE_SWTMR == 1) } else if (taskID == g_swtmrTaskID) { ret = LOS_ERRNO_TSK_SUSPEND_SWTMR_NOT_ALLOWED; +#endif } else if (OS_TSK_GET_INDEX(taskID) >= g_taskMaxNum) { ret = LOS_ERRNO_TSK_ID_INVALID; } @@ -1212,9 +1218,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskPriSet(UINT32 taskID, UINT16 taskPrio) return LOS_ERRNO_TSK_OPERATE_IDLE; } +#if (LOSCFG_BASE_CORE_SWTMR == 1) if (taskID == g_swtmrTaskID) { return LOS_ERRNO_TSK_OPERATE_SWTMR; } +#endif if (OS_CHECK_TSK_PID_NOIDLE(taskID)) { return LOS_ERRNO_TSK_ID_INVALID;