uc os iii學習筆記 任務管理

2021-07-14 21:23:34 字數 1690 閱讀 8060

記了幾篇筆記後發現,基本就是在抄書,而且由於本人繪圖能力有限,也無法貼上圖表去說明,可能導致後來的讀者完全摸不清頭腦,所以再次宣告,本人只是在給自己做知識點筆記,相關圖示和介紹請閱讀書籍《嵌入式實時作業系統us/os-iii》

`void  ostaskcreate (os_tcb        *p_tcb,

cpu_char *p_name,

os_task_ptr p_task,

void *p_arg,

os_prio prio,

cpu_stk *p_stk_base,

cpu_stk_size stk_limit,

cpu_stk_size stk_size,

os_msg_qty q_size,

os_tick time_quanta,

void *p_ext,

os_opt opt,

os_err *p_err)

使用者角度看,任務的狀態共有五種:休眠態、就緒態、執行態、等待態、中斷服務態;休眠態:指任務已存在暫存器中,但不受系統的管理,可以通過ostaskcreate();建立任務接收系統的管理,當不需要這個任務時,可以呼叫ostaskcreate();刪除任務,刪除實際上是使該**無法獲得cpu的使用權。

就緒態:任務準備執行時,就進入了就緒態,任務就緒表根據任務的優先順序順序對任務進行排序。

執行態:cpu會呼叫當前就緒態中優先順序最高的任務,使其獲得cpu的使用權,但是此時如果有更高優先順序的任務就緒,cpu會立即收回任務,呼叫更高優先順序的任務,使其獲得cpu的使用權。

等待態:當使用者呼叫使其進入等待某個事件的函式時,任務就會進入等待態,並自動放入等代表,直到其等待的事件發生,就會自動進入就緒態,並放入就緒表,當ucos-iii系統服務會判斷這個就緒任務的優先順序是否最高,如果是,cpu會剝奪當前的任務的cpu使用權,而剛就緒的任務會獲得cpu的使用權。

中斷服務態:cpu允許中斷,當中斷發生,由於中斷服務程式的優先順序最高,所以cpu會儲存當前正在執行的任務的狀態,然後進入中斷服務程式,中斷服務程式推薦寫的盡量的少,最好只是傳送某個訊息、訊號,某個任務在訊息佇列中收到訊息後,任務會進入就緒態,此時中斷服務程式結束,cpu檢視任務就緒表中是否有更高優先順序任務就緒,如果有,更高優先順序的任務會進入到執行態,cpu會進入到更高優先順序任務執行,如果就緒表中沒有更高優先順序的任務,cpu會恢復到之前執行的任務的狀態,恢復現場,回到之前執行的任務繼續執行。

任務如果呼叫了ostimaedly();或者ostimedlyhmsm();,任務可以讓自己延時一段時間,此時任務會進入就緒態,cpu會立即執行下乙個更高優先順序的任務,不會浪費時間在延時上,當延時結束,cpu判斷該任務是否是最高優先順序的任務,如果是就繼續執行,如果不是就會進入就緒態,等待執行。ostimedlyresume();的呼叫也會結束延時狀態。

任務既可以被自身掛起,也可以被其他任務掛起。

ucosIII任務管理(一)

任務 執行緒和任務其實是一樣的,只是名字不同。任務有點像c函式,但是不一樣。任務一般是死迴圈,而且沒有返回值。在任務當中可呼叫函式。當任務開始執行時,系統會給任務傳遞乙個引數 p arg,這個引數是void型指標。這個指標是乙個通用型指標,可以向任務傳遞變數位址 資料結構 函式入口等等。有了這個指標...

ucosIII任務管理(三)

系統內部任務 系統有5個內部任務,空閒任務 時鐘節拍任務 統計任務 定時任務 中斷服務管理任務,前兩個任務是初始化系統時必須建立的,後三個根據需求建立。為了產生時鐘節拍,要配置硬體定時器使其產生10 1000hz的頻率之間的中斷 實際上節拍中斷並非由定時器產生,而是由其他週期性時鐘源產生。當允許中斷...

uc os iii學習筆記 任務就緒表

就緒表由兩部分組成 就緒優先順序位對映表 就緒任務列表。記錄哪個優先順序下有任務就緒。ucosiii中任務優先級數由巨集os cfg prio max來配置,ucosiii中數值越小,優先順序越高,最低可用優先順序就是os cfg prio max 1。核心函式 os priogethighest ...