關於uCOS-II進出臨界區時使用開關中斷方式的疑問

這兩天閒來無事,正在移植uCOS-II,看見很多人這樣實現進入與退出臨界區的兩個函數:

“*OS_ENTER_CRITICAL()&OS_EXIT_CRITICAL().這兩個函數分別是退出臨界區和進入臨界區的宏指令實現。主要用於在進入臨界區之前關閉中斷,在退出臨界區的時候恢復原來的中斷狀態。它的實現比較簡單,可以直接開關中斷來實現,也可以通過保存關閉/ 恢復中斷屏蔽位來實現。”

如果進入臨界區的時候用關閉中斷、退出臨界區的時候再打開中斷來實現,是否會造成這種情況發生:代碼在臨界區的運行時間過長,造成此中斷長時間不可用?

如果用如下方式實現不更好:

1、進入臨界區時:關中斷->檢查臨界資源是否被佔用->未被佔用則標誌使用臨界資源->開中斷;

2、根據步驟1使用或者不使用臨界資源;使用完畢後進入步驟3,若不使用則其他處理;

3、退出臨界資源:關中斷->標誌臨界資源可用->開中斷

其中1和3用同一個中斷。


臨界資源只是需要互斥使用而已啊,爲什麼有些處理方式是長時間禁止中斷呢?

還在深入理解ARM處理器中,此稚嫩的疑問先做記錄,帶全面理解ARM處理器後需解開此疑問。


發佈了17 篇原創文章 · 獲贊 55 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章