RT-Thread學習筆記(5)- 臨界區的保護
阿新 • • 發佈:2019-02-11
(一)、臨界區的保護
簡單來說,臨界區的設立就是為了保護在臨界區內的程式碼不會被外界打斷,順序完整的執行下去,這樣做的目的是保證一些共享的資源在執行臨界區程式碼的中途被臨界區外的程式碼改變,造成資料紊亂,功能錯誤。
RT-Thread設定臨界區的兩種方式(主要指的是API的呼叫)及其區別 :
(1)呼叫這組API, 實現的是禁止任務排程,不會關閉別的中斷。如非必須,儘量使用這組,對系統別的部分影響相對較小。
rt_enter_critical(); //API:進入臨界區,退出前系統不會發生任務排程 /* * * 臨界區程式碼 * */ rt_exit_critical(); //API:退出臨界區
(2)呼叫這組API,會關閉微控制器所有的中斷。
rt_base_t level;
level = rt_hw_interrupt_disable(); //API:進入臨界區,退出前系統不會發生任務排程
/*
*
* 臨界區程式碼
*
*/
rt_hw_interrupt_enable(level); //API:退出臨界區
(二)、使用臨界區的注意事項
臨界區的程式碼儘量短,不要過多地佔用CPU的時間。因為這段時間,系統是不能產生任務排程的,如果臨界區程式碼消耗CPU的時間過多,就不能保證別的執行緒能夠得到實時的響應,也就失去了實時作業系統的優勢。