ISR是嵌入式應用系統獲取各種事件的基本手段。而事件是實時性問題的討論基礎和事件計算的起點。
- 中斷優先級
不同中斷服務程序應有不同優先級,在允許中斷嵌套時,最高優先級的中斷總是能夠得到響應。
只要沒關中斷,ISR可以中斷任何任務的運行,比最高優先級的任務還要高。
- Cortex-M3中斷資源
搶占優先級:實現中斷嵌套
子優先級:當搶占優先級相同的兩個中斷同時發生時,子優先級高的中斷可以首先獲得運行權。
- 中斷優先級安排原則
緊迫性:觸發中斷的事件允許耽誤的時間越短,優先級越高。
關鍵性:觸發中斷的事件越關鍵,越高
頻繁性:觸發中斷的事件發生越頻繁,越高
快捷性:前三項相近,ISR處理越快,越高。
ISR功能應盡量簡單,只要將獲取的異步事件用通信手段發給關聯任務就行,后續處理由關聯任務完成。
1. 中斷服務程序設計
- ISR結構
A:使os掌握當前中斷的嵌套深度。
B:ISR功能代碼。必須調用系統通信服務函數,與其他任務進行通信。正是這種通信功能是關聯任務得到同步信號或數據,從而進入就緒狀態。不允許調用延時函數和可能被掛起的系統服務函數。
C:清除該中斷的相應標志。以便下次再次相應。不用ISR函數,中斷源的中斷相應標志不同,清除中斷標志的代碼也不同。
D:調用退出中斷函數。實現任務調度功能。判斷是返回中斷(中斷嵌套)還是返回任務(原任務還是更高級任務)
- 選擇與關聯任務的通信手段
兩種類型:
A:信號型。ISR只完成發送信號量的工作。表示事件發生,通過信號量的同步功能出發關聯任務,所有具體工作由任務完成。
B:數據型。ISR需要完成信息采集工作,然后使用消息郵箱(消息隊列)將數據發送給關聯任務,由關聯任務完成后續數據處理工作。
細分如下:
A:觸發ISR事件不包含數據。用信號量與關聯任務通信。
B:觸發ISR事件包含數據低頻事件。用信號量與關聯任務通信。采集任務放在關聯任務中。
C:觸發ISR事件包含數據中高頻事件。ISR采集數據。ISR中使用消息郵箱與關聯任務通信。關聯任務完成后續工作。
D:觸發ISR事件包含數據非周期高頻事件。ISR采集數據,ISR中使用具有數據緩沖功能的消息隊列與關聯任務通信。
- 例子