340 likes | 543 Views
第 4 章 工作管理. ‧ 工作是一個無限的迴圈. 工作不必傳回值,所以宣告成 void. 這些函式可以在 OS_TASK 檔案中找到. ‧uC/OS-II 可以管理 64 個工作 ‧ 其中前四高優先權與四個最低優先權工作保 留供自己使用 ‧ 最新版本中,工作優先權即為工作的識別. OS_PRIO_SELF. 在程式碼中可代表該工作的優先權 但實際上為一個常數,值為 0xFF. 4.01 建立工作 OSTaskCreate(…). 建立工作需要傳遞四個參數: task – 工作程式碼的指標
E N D
第 4 章 工作管理
‧工作是一個無限的迴圈 工作不必傳回值,所以宣告成void 這些函式可以在 OS_TASK 檔案中找到
‧uC/OS-II 可以管理 64個工作 ‧其中前四高優先權與四個最低優先權工作保 留供自己使用 ‧最新版本中,工作優先權即為工作的識別
OS_PRIO_SELF • 在程式碼中可代表該工作的優先權 • 但實際上為一個常數,值為 0xFF
4.01建立工作 OSTaskCreate(…) • 建立工作需要傳遞四個參數: task – 工作程式碼的指標 pdata – 工作開始執行時傳給工作的參數的 指標 ptos – 分配給工作的堆疊的堆疊頂指標 prio – 分配給工作的優先權
OSTaskCreate() 程式碼 判別分配給工作的優先權是否有效
建立工作 OSTaskCreateExt(…) • OSTaskCreate()的擴充版本,新增5參數 id – 可將工作數超過64個的識別字 pbos – 工作堆疊底指標,用於堆疊檢驗 stk_size – 堆疊數目,用於堆疊檢驗 pext – 可指向使用者擴充資料的指標 opt – 指定是否允許堆疊檢驗、堆疊清除為 0、工作是否進行浮點操作等
4.02工作堆疊 • 每個工作都有自己的堆疊空間 • 堆疊宣告為 OS_STK 型態 • 由連續的記憶體空間組成
OS_STK_GROWTH 定義在 OS_CPU.H中 OS_STK_GROWTH=0代表堆疊由下(低位址)往上(高位址)遞增 OS_STK_GROWTH=1代表堆疊由上(高位址)往下(低位址)遞減
4.03 堆疊檢驗 OSTaskStkChk() • OS_TASK_CREATE_EXT設為1 (OS_CFG.H) • 需檢驗堆疊的工作要以OSTaskCreateExt()建立,並給予工作較多的記憶體空間。 • OSTaskCreateExt()中參數opt設定為 OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR • 可以把別的工作的優先權當參數,來檢驗該工作的堆疊使用情況。
OSTaskStkChk() 統計堆疊空間的方式是由堆疊底開始計算空閒的堆疊空間大小,即統計內容為0的連續堆疊位址的空間,到不為0的位址為止。OSTaskStkChk() 統計堆疊空間的方式是由堆疊底開始計算空閒的堆疊空間大小,即統計內容為0的連續堆疊位址的空間,到不為0的位址為止。 最後將檢驗後的資訊放到 OS_STK_DATA的資料結構中: OS_STK_DATA 定義在 uCOS_II.h 僅含有 OSFree與 OSUsed 兩資料
4.04 刪除工作 OSTaskDel(…) • 刪除工作並非工作的程式碼被刪除,而是將工作處於休眠的狀態,不會被呼叫,直到重新被喚醒。
4.05 請求刪除工作 OSTaskDelReq() 當工作A擁有記憶體緩衝區或其他資源,而工作B想要刪除該工作,則這些資源由於沒被釋放而一直被佔用。 ‧兩者可以透過OSTaskDelReq()讓工作A使用完資源後先釋放資源,再刪除自己。
讓工作B延遲一個時鐘節拍,使的工作A有足夠的時間釋放資源並刪除自己,如果有需要的話可以將延遲長一點讓工作B延遲一個時鐘節拍,使的工作A有足夠的時間釋放資源並刪除自己,如果有需要的話可以將延遲長一點
被刪除者執行的部分 (工作 A) 請求刪除者執行的部分 (工作 B )
4.06 改變工作的優先權 OSTaskChangePrio() • 允許使用者動態改變工作的優先權
若工作已經就緒,將該工作從就緒表移除,修改優先權後再插入若工作已經就緒,將該工作從就緒表移除,修改優先權後再插入
若工作尚未就緒,則工作正等待其他事件的發生,則將工作從其等待表中移除,修改新優先權後在插入若工作尚未就緒,則工作正等待其他事件的發生,則將工作從其等待表中移除,修改新優先權後在插入
4.07暫時停止工作 OSTaskSuspend() • 被暫時停止的工作只能透過呼叫 OSTaskResume() 恢復工作。 • 工作可以暫時停止自己或其他工作。 • OSTaskSuspend(暫停工作的優先權)
4.09 工作的資訊 OSTaskQuery() • 獲得的對應工作的資訊為該工作的 OS_TCB內容拷貝,意即需要宣告另依工間來儲存拷貝內容。