FreeRTOS学习之中断

优先级分组
Cortex-M处理器有三个固定优先级和256个可编程的优先级,最多有128个抢占优先级,但实际上STM32将优先级精简为16级优先级,在精简的时候会裁掉表达优先级的几个低端有效位,保留高4位表达优先级

Cortex-M处理器把256个优先级按位分为高低两段:抢占优先级和子优先级。STM32使用了4位,因此最多有5组优先级分组设置:
 NVIC_PriorityGroup_0  0位抢占优先级,4位子优先级
 NVIC_PriorityGroup_1  1位抢占优先级,3位子优先级
 NVIC_PriorityGroup_2  2位抢占优先级,2位子优先级
 NVIC_PriorityGroup_3  3位抢占优先级,1位子优先级
 NVIC_PriorityGroup_4  4位抢占优先级,0位子优先级(16个抢占优先级,没有子优先级)

用于屏蔽中断的特殊寄存器(PRIMASK、FAULTMASK、BASEPRI)
PRIMASK用于屏蔽除NMI和HardFault外的所有异常和中断
FAULTMASK用于屏蔽除NMI外的所有中断(即相比PRIMASK,FAULTMASK还可以屏蔽HardFault中断)
BASEPRI用于关闭优先级大于某个阈值(阈值由宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY决定)的中断,优先级高于这个阈值的中断就不会被关闭。Free RTOS就是操作BASEPRI寄存器来实现开关中断的。
注:优先级越高,优先级数越小。即优先级0>优先级15

宏configKERNEL_INTERRUPT_PRIORITY用来设置PendSV和滴答定时器的中断优先级

临界段代码:
Free RTOS与临界段代码保护有关的函数有4个:
任务级临界段代码保护:taskENTER_CRITICAL(),taskEXIT_CRITICAL()
中断级临界段代码保护:taskENTER_CRITICAL_FROM_ISR(),taskEXIT_CRITICAL_FROM_ISR()
在执行临界段代码时,优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断都得不到及时的响应
中断级临界段代码保护是用在中断服务程序中的,且这个中断的优先级一定要低于 configMAX_SYSCALL_INTERRUPT_PRIORITY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS中,关闭所有中断的方法是通过操作BASEPRI寄存器来实现的。具体来说,可以使用`portDISABLE_INTERRUPTS()`函数来关闭中断,该函数会将BASEPRI寄存器设置为一个较高的值,从而屏蔽低于这个阈值的中断。这样一来,所有低优先级的中断都会被禁止,只有高于这个阈值的中断才能继续执行。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [【FreeRTOS】06 临界段的保护——关中断和关调度](https://blog.csdn.net/little_grapes/article/details/125288577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [FreeRTOS学习(三)开关中断](https://blog.csdn.net/longjingcha110/article/details/86486561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [FreeRTOS之开关中断](https://blog.csdn.net/linuxweiyh/article/details/78199778)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值