FreeRTOS中断宏配置

中断宏配置

configPRIO_BITS //使用优先级的位数
configLIBRARY_LOWEST_INTERRUPT_PRIORITY //最低优先级
configKERNEL_INTERRUPT_PRIORITY //左移4位,高四位是优先级,用于pendsv,systick
pendsv,systick的优先级
0xE000ED20
#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL )
#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL )
configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY//系统管理的最大优先级,高于此,不受控制,eg:5(低于5不受控制)
configMAX_SYSCALL_INTERRUPT_PRIORITY

#define taskYIELD portYIELD()
启动pendsv
进入临界区****
#define taskENTER_CRITICAL() portENTER_CRITICAL()
#define portENTER_CRITICAL() vPortEnterCritical()
关闭中断
uxCriticalNesting加1
**退出临界区
#define taskEXIT_CRITICAL() portEXIT_CRITICAL()
#define portEXIT_CRITICAL() vPortExitCritical()
uxCriticalNesting减1;为0时开启中断

此中断函数的优先级必须是rtos可以管理的
taskENTER_CRITICAL_FROM_ISR()*
#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()
#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI()
configMAX_SYSCALL_INTERRUPT_PRIORITY写入basepri
返回值
*taskEXIT_CRITICAL_FROM_ISR()
#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x )
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)
向basepri写入值

taskDISABLE_INTERRUPTS()**
#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS()
#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
vPortRaiseBASEPRI() //关中断
{
msr basepri configMAX_SYSCALL_INTERRUPT_PRIORITY;
//优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY会屏蔽
}
向basepri写入值
***taskENABLE_INTERRUPTS()
#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS()
#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )
basepri写0,开启中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值