手把手教你用Ucos
阿新 • • 發佈:2018-11-11
Ucos作業系統的學習
實時作業系統:
任務切換,排程
分式作業系統
不可剝奪型核心
Ucosii嵌入式實時作業系統的原始碼分為三部分:與硬體無關的核心程式碼,與處理器有關的移植程式碼和使用者配置檔案。
Ucos最多支援64個任務,優先順序分別對應0~63,其中0為最高優先順序,系統保留4個最高優先順序的任務,和4個最低的優先順序任務,所有使用者可以使用的任務56個
1.建立任務
a) OSTaskCReat()/OStaskCreat(
i. OStaskCreat(void(*task),void pdata ,OS_STK * post,INTU prio)
1. Task:是指任務程式碼的指標
2. Pdata: 任務開始執行是,傳遞給任務的引數的指標
3. Post:分配給任務的堆疊的棧頂指標
4. Prior:分配任務的優先順序
2, 任務堆疊
a) OS_STK()
i. 每個任務都有自己的堆疊,堆疊必須宣告為OS_STK型別,並且連續的記憶體空間組成。
ii. 可以靜態分配和動態分配
3, 堆疊檢驗
a) OSTaskStkChk()
i. 有時確定任務是要知道堆疊空間的大小,這個函式可以避免分配過多的空間 4. 刪除任務OSTask() a. 指的是任務進入休眠狀態,而不是指程式碼被刪除,只是不再被ucos呼叫。注意:刪除任務之前要保證任務並非空閒任務 5. 請求刪除任務 OSTaskDelreq() a.有時任務會佔用一些記憶體或者訊號量一類的資源。這時,假如另一個任務試圖刪除任務,這些被佔用的資源就會應為沒有被釋放而丟失。在這種情況下,需要任務在使用完後釋放,然後自己刪除。 6. 改變任務的優先順序 OSTaskChangePrio() a.當建立一個任務時,需要利用OSTaskCreate()函式指定任務的優先順序,在絕大部分的情況下不需要改變系統執行時的惹任務優先順序,但是要是改變的話,OSTaskChangePrio()可以做到. b.void OSTaskChangePrio(OS_TCB *p_tcp,OS_PRIO prio_new,OS_ERR *err); i.p_tcp :需要改變優先順序任務。如果傳入NULL指當前任務的優先順序 ii:p_new:新的優先順序,該值不能大於或者等於OS_CFG_PRIO_MAX-1de數值,也不能為0. iii: 存放該函式的錯誤返回碼。 7. OS_FlagDel() a.用於刪除時間標誌組。使用時注意,可能同時刪除多個任務都依賴於時間標誌組 b.OS_OBJ_QTY OSFlagDel(OS_FLAG_GPR *p_grp,OS_OPT opt,OE_ERR *p_err),任務使能開光OS_CFG_FLAG_EN和 OS_CFG_FLAG_EDL_EN i.p_grp 指向要刪除事件的標誌組的指標 ii.opt 指定刪除事件組的標誌 iii.err 錯誤返回