freertos(第三課,interrupt for critical segment)

freertos中,並不提供掛接IRQHandler的API。
所以,如果需要註冊ISR,仍然需要使用standaloneOS提供的API。例如GIC的API。
freertos提供的中斷管理,只是用來屏蔽和打開中斷,用來進行臨界代碼段保護。
freertos提供了幾個宏擬函數,用來進行臨界代碼段保護。

#define taskENTER_CRITICAL()//mask all IRQ
#define taskEXIT_CRITICAL()// clear mask 

#define taskENTER_CRITICAL_FROM_ISR()//return a ISRIdentifier
#define taskEXIT_CRITICAL_FROM_ISR(x) // use the ISRIdentifier

實質上,底層都是通過屏蔽中斷或者打開中斷來實現的。

#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0)

注意一個關鍵的宏,
configMAX_SYSCALL_INTERRUPT_PRIORITY,
低於這個值的中斷,將被屏蔽,而高於這個值的中斷則不會被屏蔽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章