1 / 34

第 4 章 工作管理

第 4 章 工作管理. ‧ 工作是一個無限的迴圈. 工作不必傳回值,所以宣告成 void. 這些函式可以在 OS_TASK 檔案中找到. ‧uC/OS-II 可以管理 64 個工作 ‧ 其中前四高優先權與四個最低優先權工作保    留供自己使用 ‧ 最新版本中,工作優先權即為工作的識別. OS_PRIO_SELF. 在程式碼中可代表該工作的優先權 但實際上為一個常數,值為 0xFF. 4.01 建立工作 OSTaskCreate(…). 建立工作需要傳遞四個參數: task – 工作程式碼的指標

jerod
Download Presentation

第 4 章 工作管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 4 章 工作管理

  2. ‧工作是一個無限的迴圈 工作不必傳回值,所以宣告成void 這些函式可以在 OS_TASK 檔案中找到

  3. ‧uC/OS-II 可以管理 64個工作 ‧其中前四高優先權與四個最低優先權工作保    留供自己使用 ‧最新版本中,工作優先權即為工作的識別

  4. OS_PRIO_SELF • 在程式碼中可代表該工作的優先權 • 但實際上為一個常數,值為 0xFF

  5. 4.01建立工作 OSTaskCreate(…) • 建立工作需要傳遞四個參數: task – 工作程式碼的指標 pdata – 工作開始執行時傳給工作的參數的      指標 ptos – 分配給工作的堆疊的堆疊頂指標 prio – 分配給工作的優先權

  6. OSTaskCreate() 程式碼 判別分配給工作的優先權是否有效

  7. 建立工作 OSTaskCreateExt(…) • OSTaskCreate()的擴充版本,新增5參數 id – 可將工作數超過64個的識別字 pbos – 工作堆疊底指標,用於堆疊檢驗 stk_size – 堆疊數目,用於堆疊檢驗 pext – 可指向使用者擴充資料的指標 opt – 指定是否允許堆疊檢驗、堆疊清除為 0、工作是否進行浮點操作等

  8. 4.02工作堆疊 • 每個工作都有自己的堆疊空間 • 堆疊宣告為 OS_STK 型態 • 由連續的記憶體空間組成

  9. OS_STK_GROWTH 定義在 OS_CPU.H中 OS_STK_GROWTH=0代表堆疊由下(低位址)往上(高位址)遞增 OS_STK_GROWTH=1代表堆疊由上(高位址)往下(低位址)遞減

  10. 4.03 堆疊檢驗 OSTaskStkChk() • OS_TASK_CREATE_EXT設為1 (OS_CFG.H) • 需檢驗堆疊的工作要以OSTaskCreateExt()建立,並給予工作較多的記憶體空間。 • OSTaskCreateExt()中參數opt設定為 OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR • 可以把別的工作的優先權當參數,來檢驗該工作的堆疊使用情況。

  11. OSTaskStkChk() 統計堆疊空間的方式是由堆疊底開始計算空閒的堆疊空間大小,即統計內容為0的連續堆疊位址的空間,到不為0的位址為止。OSTaskStkChk() 統計堆疊空間的方式是由堆疊底開始計算空閒的堆疊空間大小,即統計內容為0的連續堆疊位址的空間,到不為0的位址為止。 最後將檢驗後的資訊放到 OS_STK_DATA的資料結構中: OS_STK_DATA 定義在 uCOS_II.h 僅含有 OSFree與 OSUsed 兩資料

  12. OSTaskStkChk(….) 程式碼

  13. 4.04 刪除工作 OSTaskDel(…) • 刪除工作並非工作的程式碼被刪除,而是將工作處於休眠的狀態,不會被呼叫,直到重新被喚醒。

  14. 確保不在ISR中刪除工作

  15. 4.05 請求刪除工作 OSTaskDelReq() 當工作A擁有記憶體緩衝區或其他資源,而工作B想要刪除該工作,則這些資源由於沒被釋放而一直被佔用。 ‧兩者可以透過OSTaskDelReq()讓工作A使用完資源後先釋放資源,再刪除自己。

  16. 讓工作B延遲一個時鐘節拍,使的工作A有足夠的時間釋放資源並刪除自己,如果有需要的話可以將延遲長一點讓工作B延遲一個時鐘節拍,使的工作A有足夠的時間釋放資源並刪除自己,如果有需要的話可以將延遲長一點

  17. OSTaskDelReq() 程式碼

  18. 被刪除者執行的部分 (工作 A) 請求刪除者執行的部分 (工作 B )

  19. 4.06 改變工作的優先權 OSTaskChangePrio() • 允許使用者動態改變工作的優先權

  20. 若工作已經就緒,將該工作從就緒表移除,修改優先權後再插入若工作已經就緒,將該工作從就緒表移除,修改優先權後再插入

  21. 若工作尚未就緒,則工作正等待其他事件的發生,則將工作從其等待表中移除,修改新優先權後在插入若工作尚未就緒,則工作正等待其他事件的發生,則將工作從其等待表中移除,修改新優先權後在插入

  22. 4.07暫時停止工作 OSTaskSuspend() • 被暫時停止的工作只能透過呼叫 OSTaskResume() 恢復工作。 • 工作可以暫時停止自己或其他工作。 • OSTaskSuspend(暫停工作的優先權)

  23. OSTaskSuspend() 程式碼

  24. 4.08 恢復工作 OSTaskResume()

  25. 4.09 工作的資訊 OSTaskQuery() • 獲得的對應工作的資訊為該工作的 OS_TCB內容拷貝,意即需要宣告另依工間來儲存拷貝內容。

  26. OSTaskQuery() 程式碼

More Related