UCOSIII的任務狀態

2021-09-02 14:07:21 字數 1661 閱讀 4212

1、休眠態:任務已經在cpu的flash中了,但是還沒有交給ucosiii管理。

2、就緒態:系統為任務分配了任務控制塊,並且任務已經在就緒表中登記,這時這個任務就具有了執行的條件,此時任務的狀態就是就緒態。

3、執行態:任務獲得cpu的使用權,正在執行。任何時刻只能有乙個任務處於執行態。。

4、等待態:正在執行的任務需要延時一段時間,或者等待某個事件,這個任務就進入了等待態,此時系統就會把cpu使用權轉交給別的任務,直到延時或者等待時間結束。

5、中斷服務態:響應中斷時,當前正在執行的任務會被掛起,cpu轉而去執行中斷服務函式,此時任務的任務狀態叫做中斷服務態。

任務有返回值型別和引數,但任務函式永遠不會返回。

任務狀態轉換圖

等待態->休眠態 執行態->休眠態 就緒態->休眠態

ostaskel() 這個函式允許您刪除乙個任務。呼叫任務可以通過指定null來刪除自己「p_tcb」的指標。被刪除的任務返回到休眠狀態,並且可以被重新啟用再次建立已刪除的任務。

執行態->等待態

osmutexpend() 這個函式等待互斥鎖。

osqpend() 這個函式等待一條訊息被傳送到乙個佇列

ossempend() 這個函式等待訊號量。

ostimedlyhmsm() 這個函式被呼叫來延遲當前正在執行的任務的執行,直到某個時間過期。這呼叫允許您在小時、分鐘、秒和毫秒內指定延遲時間,而不是計時。

等待態->就緒態

osmutexpost() 這個函式表示乙個互斥量

osqpost() 這個函式向佇列傳送一條訊息。有了「opt」引數,您可以指定訊息廣播到所有等待的任務和/或你是否將訊息發布到佇列的前面(lifo)或者通常(fifo)在佇列的末尾。

ossempost() 這個函式發出訊號量

ostaskqpost() 這個函式向乙個任務傳送一條訊息

ostasksempost() 這個函式被呼叫來發出等待訊號的任務。

就緒態->執行態

osintexit () 這個函式用於通知uc/os-iii,您已經完成了對isr的服務。當最後乙個巢狀的isr已經完成,uc/os-iii將呼叫排程程式來確定乙個新的高優先順序任務是否為準備執行。

osstart () 這個函式用於啟動多工處理過程,讓uc/os-iii管理您的任務建立。在您呼叫osstart()之前,您必須呼叫osinit(),您至少必須建立它乙個應用程式的任務。

os_task_sw()  這個巨集定義發起任務切換。

休眠態->就緒態

ostaskcreate() 這個函式用於uc/os-iii管理任務的執行。任務可以被建立

在多工處理或執行任務之前。乙個任務不能由isr建立。

執行態->就緒態

task preempted 任務搶占

中斷服務態->就緒態

osintexit() 這個函式用於通知uc/os-iii,您已經完成了對isr的服務。當最後乙個巢狀的isr已經完成,uc/os-iii將呼叫排程程式來確定乙個新的高優先順序任務是否為準備執行。

中斷服務態->執行態

return 返回

from

interrupt中斷

執行態->中斷服務態

interrupt   中斷

uc OS III任務的理解

在實際應用中一般是將工作拆分為多個任務的,並且每個任務都是可靠的。在使用uc os就可以很好的解決這個問題,任務又叫執行緒,在對於單個cpu來說,在任何時刻,都是只能有有乙個任務被執行。uc os iii 支援多工且對任務數量沒有限制,任務數僅取決於處理器記憶體的大小 ram 多任務排程是任務間占用...

ucosIII 系統任務

系統任務 空閒任務 空閒任務特點 1.空閒任務是ucosiii建立的第乙個任務。2.空閒任務是ucosiii必須建立的。3.空閒任務優先順序總是為os cfg prio mak 1。4.空閒任務中不能呼叫任何可使空閒任務進入等待態的函式!在osinit 中呼叫 os idletaskinit p e...

UCOS iii 任務排程

任務排程的時機 1 當前任務給其他任務發訊號,結束時呼叫。任務呼叫提交服務函式 os?post 傳送訊號量或訊息給其它任務時排程發生 2 任務呼叫ostimedly 或ostimedlyhmsm 如果延時引數不是0,排程發生。排程會在該任務被放入掛起佇列後馬上執行。3 任務所等待的事件發生或超時。4...