分享到plurk 分享到twitter 分享到facebook

版本 fe037fdcc97810eae020d9a5aacb207132a72b00

embedded/Sol10

Changes from fe037fdcc97810eae020d9a5aacb207132a72b00 to current

---
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 秒。