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

例如,在SDK中移植的freertos,设置的configMAX_SYSCALL_INTERRUPT_PRIORITY,是18,
而SYSTICK的优先级,设置的是30。
也就是说,最低优先级是30,最高APISAFE优先级是18。
那么,如果在GIC中connect了一个Callback,对应的IRQ,优先级设置为18或者19,那么在Callback中,是可以使用FromISR的API的。
但是如果在GIC中connect了一个IRQ,优先级设置为17或者16或更高,那么Callback中,就不可以使用FromISR的API。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值