1. 程式人生 > >rt-thread中的系統任務

rt-thread中的系統任務

rt-thread中的系統任務

實時作業系統中在使用者程序建立前系統任務已經建立執行,其中以idle任務最為常見,其它的如統計任務、軟體定時器任務等等都是系統任務的例項。

最早我學習ucos-II時,我瞭解到該系統中存在著兩個系統任務,分別是空閒任務和統計任務。當系統中無使用者任務執行時,空閒任務就會被選中執行,空任務一般沒有具體的工作,只是讓cpu保持在執行狀態,對空閒計數變數加1。ucos-III仍然有空閒任務與系統任務,除此之外還多了時鐘節拍任務、軟體定時器任務、中斷服務管理任務,擴充套件了系統的功能。

較ucos而言,rt-thread中除空閒任務、定時器任務(可配置)之外,還多了一個main任務。rt-thread的執行入口函式並不是常見的main,在rt-thread中main函式僅僅作為main任務執行主體中的子函式進行呼叫。

main任務中完成了元件初始化工作,其它相對低階的初始化工作由 rtthread_startup函式完成。

我在這裡想著重講講rt-thread的空閒任務,它與ucos中的空閒任務不同,它完成了任務資源回收的工作。不得不說這一點對系統的效能有很大的提升,這就是追求卓越的效能的一種方式。任務的退出變得更加簡潔,對任務佔有資源的延遲迴收有助於提高cpu使用率。

對於靜態建立的任務而言,強制刪除任務與任務的自然終止都僅僅通過從系統的就續表中解除連結的方式完成,不需要釋放記憶體。對於動態建立的任務而言,強制刪除任務與任務的自然終止也要完成同樣的功能,不過rt-thread將任務佔有的動態資料結構延遲釋放。僅僅在任務退出時將任務插入到回收連結串列中,在下一次系統空閒時由空閒任務的執行函式遍歷回收連結串列來釋放動態資料結構。

使用者可以實現屬於單個任務的回收函式,該回收函式是tcb中的cleanup函式指標。當該函式部不為空時,就會在idle任務中進行執行。這是一個擴充套件,增強了任務資源回收的靈活性。