任務排程的時機:
1、當前任務給其他任務發訊號,結束時呼叫。
任務呼叫提交服務函式
os???post()
, 傳送訊號量或訊息給其它任務時排程發生
2、任務呼叫ostimedly()或ostimedlyhmsm();
如果延時引數不是0,排程發生。排程會在該任務被放入掛起佇列後馬上執行。
3、任務所等待的事件發生或超時。
4、任務取消掛起時排程發生。
5、新任務被建立時發生。
6、任務被刪除時發生。
7、核心物件被刪除時。
任務所等待的核心物件被刪除時(事件標誌組、訊號量、訊息佇列、 mutex都是核心物件), 這些任務就可能被就緒。 然後排程發生。
8、任務改變自身優先順序或其它任務優先順序時,排程發生。
9、任務呼叫ostasksuspend()停止自身時,排程發生。
10、任務呼叫ostaskresume()恢復其它停止了的任務時,排程發生。
11、當退出中斷服務程式時,排程發生。這種情況下,排程器呼叫osintexit()函式開始排程而不是ossched()。
12、用osschedlock()鎖排程器,排程發生。需要注意的是,鎖排程器可以被巢狀,解鎖次數必須等於加鎖次數。
13、用osschedroundrobinyield()任務放棄了分配給它的時間片時發生排程。
14、使用者程式呼叫ossched()時。
任務排程任務級:ossched(),
任務排程中斷級:osintexit(),
os_schedroundrobin():時間片輪轉排程時的相關函式,主要是把對應優先順序的第乙個tcb塊,移動到最後乙個。下次再找最高優先順序的就緒任務時,就找到了相同優先順序的的下乙個任務的tcb。
ucosIII 系統任務
系統任務 空閒任務 空閒任務特點 1.空閒任務是ucosiii建立的第乙個任務。2.空閒任務是ucosiii必須建立的。3.空閒任務優先順序總是為os cfg prio mak 1。4.空閒任務中不能呼叫任何可使空閒任務進入等待態的函式!在osinit 中呼叫 os idletaskinit p e...
uc OS III任務的理解
在實際應用中一般是將工作拆分為多個任務的,並且每個任務都是可靠的。在使用uc os就可以很好的解決這個問題,任務又叫執行緒,在對於單個cpu來說,在任何時刻,都是只能有有乙個任務被執行。uc os iii 支援多工且對任務數量沒有限制,任務數僅取決於處理器記憶體的大小 ram 多任務排程是任務間占用...
UCOSIII的任務狀態
1 休眠態 任務已經在cpu的flash中了,但是還沒有交給ucosiii管理。2 就緒態 系統為任務分配了任務控制塊,並且任務已經在就緒表中登記,這時這個任務就具有了執行的條件,此時任務的狀態就是就緒態。3 執行態 任務獲得cpu的使用權,正在執行。任何時刻只能有乙個任務處於執行態。4 等待態 正...