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,
低于这个值的中断,将被屏蔽,而高于这个值的中断则不会被屏蔽。