本帖最后由 xueren 于 2013-7-16 02:13 編輯
任務控制塊的初始化是在創建任務的時候必須要執行的操作,對任務控制塊和一些相關的數據結構進行了處理。
內核在進行任務調度的時候,必須知道哪個任務在運行、哪個任務是就緒的最高優先級的任務。任務控制塊初始化函數OS_TCBInit聲明如下:
50.png (41.01 KB, 下載次數: 79)
下載附件
2013-7-16 02:11 上傳
50.png (49.76 KB, 下載次數: 65)
下載附件
2013-7-16 02:09 上傳
52.png (23.92 KB, 下載次數: 64)
下載附件
2013-7-16 02:08 上傳
這個函數是uC/OS-II的內部函數,當任務被創建的時候用來初始化任務控制塊。
參數解析如下:
* pri: 被創建的任務的優先級
* ptos: 任務堆棧棧頂的地址
* pbos: 任務堆棧棧底的地址,如果是使用OSTaskCreate()創建的任務,那么是沒有擴展功能的,不能進行堆棧檢查,就不合適用pbos這個參數,這個參數可以傳遞為NULL。
* id: 任務的ID,16位,取值范圍是0~65535。
* stk_size: 堆棧的大小。
* pext: 任務控制塊的擴展塊的地址。
* opt: 其他的選項。
返回值如下:
* OS_ERR_NONE: 成功調用。
* OS_EER_TASK_NO_MORE_TCB: 如果沒有空閑的任務控制塊。
注意:該函數屬于操作系統內部函數,不應該在外部調用。
在操作系統要創建一個任務時,如果空閑任務控制塊鏈表中有任務控制塊,說明可以創建任務,這時將取下一個任務塊,并給任務控制塊的各個域進行賦值,隨后調用兩個鉤子函數,這兩個鉤子函數允許用戶自己填寫代碼,默認為空。隨后對任務優先級指針表和就緒組及就緒表進行相關操作,如下圖所示:
53.png (19.68 KB, 下載次數: 68)
下載附件
2013-7-16 02:08 上傳
|