ucosII是任務占先式實時操作系統,每個任務對應一個優先級,優先級高的任務優先執行。
最近慢慢體會到精細思維的樂趣。很多時候,一開始我們對一個事物的認知都是比較粗糙的,通過具體地思考,這個事物變得明晰,豐富,準確。從包含著很多假設和臆想的粗糙輪廓出發,花時間去梳理一條條線,從無到有,在腦中描繪出它的樣子,去偽存真,添線勾畫,聯想生活,達到具體豐富、清晰簡明的描繪。(題外話)
一開始說到ucos,我腦中就閃過優先級高的任務占先執行,優先級高的任務來了,當前任務被掛起,馬上執行高優先級任務。
這個描述雖然很對,卻很粗糙,沒有涉及任何ucos的細節。這時我會臆想,系統循環檢測活動任務表,找優先級高的做任務切換。這只能說假如要實現任務占先,可能可以用這種方法來實現,但是ucosII是不是就是這樣做的呢,需要去看。經過幾天的梳理,聯想,ucos在我腦中變得比較清晰了。
ucos在做任務調度不是簡單地循環檢測任務優先級,還有一個事件的機制。簡化一點,一個任務對應一個事件,任務運行時,檢查對應事件是否有,有則繼續,沒有則阻塞(其實我更喜歡稱之為休眠),等待該事件,然后別的任務發送該事件請求時,任務就會被喚醒,加入到活動任務表中。事件還有一個隊列,發送的事件請求如果沒有任務在等待,事件請求就會被放進隊列中,然后當該任務被激活(執行)并檢查對應事件隊列時,有則隊列減1并處理事件請求。
事件有很多類型,如含參數事件,信號量事件,郵件事件等。
ucos支持任務休眠一段時間,要給它設置一個內部時鐘,時鐘中斷檢查每個任務當前休眠的時間,任務休眠時間跑完后,任務被加入到活動任務表中。
有任何任務休眠或被喚醒時,都會執行任務調度,就是在活動任務表中查找最高優先級任務,把內核控制權交給最高優先級任務。
(審核編輯: 智匯小新)
分享