1. 程式人生 > >手把手教你用Ucos

手把手教你用Ucos

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    錯誤返回