--- title: Lab10: Priority Inversion (Solution) toc: no ... Information ------------------- - Provided by: Lucas Wei * GIT repository/branch: https://gitcafe.com/embedded2013/Labs/tree/SOL-10 - Provided by: Taylor Huang * GIT repository/branch: https://gitcafe.com/embedded2013/Labs/tree/SOL-10-1 FreeRTOS 模擬 Mars Pathfinder 的情況 (Taylor Huang) ------------------------------------------------------------ ![](/embedded/Sol10/bounded.png) 如上所示,bounded 是沒有開啟中優先權的情形,雖然高優先權被低優先權卡住, 但是高優先在得到資源後,仍然是在 deadline 內,可以在時間內執行高優先權的任務。但是在 unbounded 的圖內可以看到中優先權的 Task 出現後,導致低優先權被 preemptive,拖延了 資源釋放的時間,雖然最後高優先權最後拿到資源,但是設定的 watch dog 偵測到 deadline 後印出了要 restart 的字串。 在程式碼 17 行可設定是否要加入中優先權Task(unbounded),註解掉 17 行代表不加入 ![](/embedded/Sol10/unbounded.png) 程式碼 320 行處註解掉的 vTaskDelay 是因為會導致模擬失敗的關鍵,經過測試了一個下午 + 晚上, 在 Delay 時間到了後會強行 content switch 讓低優先執行且權釋放 semaphore,並讓高優先權立即使用, 即使中優先權的 Task 正在執行 (已在中優先權內放了disable interrupt 和 enter critical section 依然沒用), 故改成用程式碼執行拖延 3.4 秒。