feat: 调度、任务及pm解耦
pm中冻结线程的操作,融合至OsSchedSuspend和OsSchedResume, 使得调度模块提供对应完整的方法给任务模块,做到之间的相互解耦, 方便其它调度算法的融入。 Close #I4JTN6 Signed-off-by: zhushengle <zhushengle@huawei.com> Change-Id: Ifde7077166a2fe67e7246fa68f777844640d67db
This commit is contained in:
@@ -71,11 +71,6 @@
|
||||
#define UWROLLNUMDEC(NUMBER) \
|
||||
((NUMBER) = ((NUMBER) - 1))
|
||||
|
||||
|
||||
#define OS_CHECK_TASK_BLOCK (OS_TASK_STATUS_DELAY | \
|
||||
OS_TASK_STATUS_PEND | \
|
||||
OS_TASK_STATUS_SUSPEND)
|
||||
|
||||
/**
|
||||
* @ingroup los_task
|
||||
* @brief check task id's validation
|
||||
@@ -830,20 +825,11 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
|
||||
OS_GOTO_ERREND();
|
||||
}
|
||||
|
||||
#if (LOSCFG_KERNEL_PM == 1)
|
||||
if (tempStatus & OS_TASK_FALG_FREEZE) {
|
||||
OsPmUnfreezeTaskUnsafe(taskID);
|
||||
}
|
||||
#endif
|
||||
|
||||
taskCB->taskStatus &= (~OS_TASK_STATUS_SUSPEND);
|
||||
if (!(taskCB->taskStatus & OS_CHECK_TASK_BLOCK)) {
|
||||
OsSchedTaskEnQueue(taskCB);
|
||||
if (g_taskScheduled) {
|
||||
LOS_IntRestore(intSave);
|
||||
LOS_Schedule();
|
||||
return LOS_OK;
|
||||
}
|
||||
BOOL needSched = OsSchedResume(taskCB);
|
||||
if (needSched && g_taskScheduled) {
|
||||
LOS_IntRestore(intSave);
|
||||
LOS_Schedule();
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
@@ -897,18 +883,8 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskSuspend(UINT32 taskID)
|
||||
OS_GOTO_ERREND();
|
||||
}
|
||||
|
||||
if (tempStatus & OS_TASK_STATUS_READY) {
|
||||
OsSchedTaskDeQueue(taskCB);
|
||||
}
|
||||
OsSchedSuspend(taskCB);
|
||||
|
||||
#if (LOSCFG_KERNEL_PM == 1)
|
||||
if ((tempStatus & (OS_TASK_STATUS_PEND_TIME | OS_TASK_STATUS_DELAY)) && OsIsPmMode()) {
|
||||
OsPmFreezeTaskUnsafe(taskID);
|
||||
}
|
||||
#endif
|
||||
|
||||
taskCB->taskStatus |= OS_TASK_STATUS_SUSPEND;
|
||||
OsHookCall(LOS_HOOK_TYPE_MOVEDTASKTOSUSPENDEDLIST, taskCB);
|
||||
if (taskID == g_losTask.runTask->taskID) {
|
||||
LOS_IntRestore(intSave);
|
||||
LOS_Schedule();
|
||||
|
||||
Reference in New Issue
Block a user