UC OS基礎知識之任務的掛起和恢復

2021-07-09 07:43:42 字數 1670 閱讀 9813

所謂掛起就是停止這個任務的執行。使用者可以通過呼叫系統提供的ostasksuspend()函式來掛起除空閒任務之外的其他任務,只能在其他任務中呼叫恢復函式ostaskresume()使其恢復為就緒狀態。任務在執行,就緒狀態和等待狀態之間的轉移關係如下圖

1.任務的掛起

掛起任務函式ostasksuspend()如下所示

#if os_task_suspend_en > 0

int8u ostasksuspend (int8u prio)

if (prio >= os_lowest_prio)

}#endif

os_enter_critical();

if (prio == os_prio_self) else

if (prio == ostcbcur->ostcbprio) else

ptcb = ostcbpriotbl[prio];

if (ptcb == (os_tcb *)0)

if (ptcb == (os_tcb *)1)

y = ptcb->ostcby;

osrdytbl[y] &= ~ptcb->ostcbbitx; /* make task not ready */

if (osrdytbl[y] == 0)

ptcb->ostcbstat |= os_stat_suspend; /* status of task is 'suspended' */

os_exit_critical();

if (self == os_true)

return (os_no_err);

}#endif

任務掛起的流程圖如下圖所示

2.任務的恢復

任務恢復函式ostaskresume()原型如下所示

int8u  ostaskresume (int8u prio)

#endif

os_enter_critical();

ptcb = ostcbpriotbl[prio];

if (ptcb == (os_tcb *)0)

if (ptcb == (os_tcb *)1)

if ((ptcb->ostcbstat & os_stat_suspend) != os_stat_rdy) else

} else

return (os_no_err);

}os_exit_critical();

return (os_task_not_suspended);

}#endif

任務恢復的流程圖如下圖所示

ucos 任務的掛起與恢復

看看任務掛起的函式 if os task suspend en 0 int8u ostasksuspend int8u prio if prio os lowest prio endif os enter critical if prio os prio self else if prio ostc...

C OS II 示例 ucos任務的掛起與刪除

1 設計乙個只有乙個任務mytask的應用程式。2 在 1 的任務mytask中再建立乙個任務yourtask。要求當任務yourtask執行20次後,掛起任務mytask 當任務yourtask執行40次後,恢復任務mytask。要求任務mytask和任務yourtask執行一段時間後,使任務my...

UC OS基礎知識之時間管理

由於嵌入式系統的任務是乙個無限迴圈,並且uc os ii還是個搶占式核心,所以為了使優先級別高的任務不至於獨佔cpu,uc os ii規定 除了空閒任務之外的所有任務必須在任務中合適的位置呼叫系統提供的函式ostimedly 使當前任務的執行延時 暫停 一段時間並進行一次任務排程,以讓出cpu的使用...