uCOS III開關中斷進出臨界區的三個巨集

2021-07-17 02:01:07 字數 1702 閱讀 9137

* 1. 臨界區解釋:

* **的臨界短也稱為臨界區,指處理時不可分割的**。一旦這部分**開始執行,則不允許

* 任何中斷打入。為確保臨界段**的執行不被中斷,在進入臨界段之前必須關中斷,而臨界段

* **執行完後,要立即開中斷。

* 2. ucos-iii中有兩種進入臨界區方式和一種開關中斷方式。下面簡單說明:

* 注意,臨界區的處理方式採用的方式3,即cpu_critical_method_status_local,在cpu.h檔案定義。

* 下面三組函式都是支援巢狀呼叫的。

* (1)開關中斷(通過暫存器primask實現全域性中斷的開關): 

* cpu_int_dis(); 關閉中斷 

* 防止被中斷打斷的**

* cpu_int_en(); 開啟中斷 

* ---這兩個函式支援巢狀呼叫

** (2)進入臨界段和退出臨界段方式一, 在cpu.h檔案定義 

* 臨界區設定裡面也有開關中斷操作的,並且支援開關中斷的巢狀使用

* cpu_critical_enter(); 進入臨界區 

* 臨界區**

* cpu_critical_exit() ; 推出臨界區

* * 這兩個函式跟上面cpu_int_dis和cpu_int_en的區別是:

* a. 如果沒有使能巨集定義cpu_cfg_int_dis_meas_en。

* #define cpu_critical_enter() do while (0) 

* #define cpu_critical_exit() do while (0) 

* 兩者一樣。

* b. 如果使能就開啟測量功能。

* #define cpu_critical_enter() do while (0) 

* #define cpu_critical_exit() do while (0)

* 多了乙個測量功能。

* c. 通過暫存器primask實現全域性中斷的開關。

** (3)進入臨界段和退出臨界段方式二, 在os.h檔案定義

* os_critical_enter(); 進入臨界區 

* 臨界區**

* os_critical_exit() ; 推出臨界區

** 這兩個函式跟上面cpu_critical_enter和cpu_critical_exit的區別是:

* a. 如果沒有使能巨集定義os_cfg_isr_post_deferred_en,即中斷延遲提交功能。

* #define os_critical_enter() cpu_critical_enter()

* #define os_critical_exit() cpu_critical_exit()

* 兩者沒有區別。

* b. 如果使能: 

* #define os_critical_enter() \

* do \

* cpu_critical_exit(); \

* } while (0)

** #define os_critical_exit() \

* do else \

* } else \

* } while (0)

* 從這裡可以看出,如果開啟了中斷延遲提交,那麼os_critical_enter僅僅是給

* 排程器進行了枷鎖,而且也是支援巢狀呼叫的,並沒有關閉全域性中斷。

開關中斷與cpsid cpsie指令

在彙編 中,cpsid cpsie 用於快速的開關中斷。cpsid i primask 1,關中斷 cpsie i primask 0,開中斷 cpsid cpsieff faultmask 1,faultmask 0 關異常 開異常 i irq中斷 f fiq中斷 最常見的這兩個命令的使用處是在關...

FreeRTOS臨界段函式 開關中斷函式呼叫關係

1 freertos開關中斷函式分別為portenable interrupts 和portdisable interrupts 2 freertos臨界段保護相關函式 taskenter critical taskexit critical taskenter critical from isr ...

uc os iii學習筆記 中斷管理

中斷 應內部或外部非同步事件的請求中止當前任務,而去處理非同步事件所要求的任務的過程叫做中斷 void usart1 irqhandler void 進入中斷服務函式以後使用函式osintenter void osintenter void if osintnestingctr os nesting...