這兩天閒來無事,正在移植uCOS-II,看見很多人這樣實現進入與退出臨界區的兩個函數:
“*OS_ENTER_CRITICAL()&OS_EXIT_CRITICAL().這兩個函數分別是退出臨界區和進入臨界區的宏指令實現。主要用於在進入臨界區之前關閉中斷,在退出臨界區的時候恢復原來的中斷狀態。它的實現比較簡單,可以直接開關中斷來實現,也可以通過保存關閉/ 恢復中斷屏蔽位來實現。”
如果進入臨界區的時候用關閉中斷、退出臨界區的時候再打開中斷來實現,是否會造成這種情況發生:代碼在臨界區的運行時間過長,造成此中斷長時間不可用?
如果用如下方式實現不更好:
1、進入臨界區時:關中斷->檢查臨界資源是否被佔用->未被佔用則標誌使用臨界資源->開中斷;
2、根據步驟1使用或者不使用臨界資源;使用完畢後進入步驟3,若不使用則其他處理;
3、退出臨界資源:關中斷->標誌臨界資源可用->開中斷
其中1和3用同一個中斷。
臨界資源只是需要互斥使用而已啊,爲什麼有些處理方式是長時間禁止中斷呢?
還在深入理解ARM處理器中,此稚嫩的疑問先做記錄,帶全面理解ARM處理器後需解開此疑問。