* 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...