29-中断管理

本文介绍了中断管理在FreeRTOS中的关键作用,特别是如何通过configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY配置中断优先级,以及在临界段保护中的运用,包括任务级和中断级的临界段代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中断管理

  • 什么是中断管理?

用户可以自定义配置系统可管理的最高中断优先级的宏定义configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY(高四位有效),它是用于配置内核中的basepri 寄存器的,当 basepri 设置为某个值的时候,NVIC 不会响应比该优先级低的中断,而优先级比之更高的中断则不受影响。

例如:

就是说当这个宏定义配置为 5 的时候,中断优先级数值在 01234 的这些中断是不受 FreeRTOS 屏蔽的,也就是说即使在系统进入临界段的时候,这些中断也能被触发而不是等到退出临界段的时候才被触发,当然,这些中断服务函数中也不能调用 FreeRTOS 提供的 API 函数接口,而中断优先级在 5 15 的这些中断是可以被屏蔽的,也能安全调用 FreeRTOS 提供的 API 函数接口。

中断管理主要应用于临界段保护中

  • 临界段保护

临界段用一句话概括就是一段在执行的时候不能被中断的代码段。在 FreeRTOS 里面,这个临界段最常出现的就是对全局变量的操作。

Cortex-M内核快速开关中断指令

细看一下下边的寄存器的配置的含义

  1. 关中断

FreeRTOS 关中断的函数在 portmacro.h 中定义,分不带返回值和带返回值两种。

不带返回值

可以看到关中断函数中应用了configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY这个宏定义。将这个定义的值写入basepri寄存器(在上方的寄存器中可以看到)

因此这个关中断的含义就是,比configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY这个宏设置的值高(带等于)的中断都被关闭,比这值小的中断没有被关闭(优先级号越大,优先级越低)。

相当于是低优先级的中断都被关闭,高优先级的中断都可以正常使用

带中断保护的关中断,带返回值

  1. 开中断

  1. 在使用临界段保护代码的时候怎么体现的

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如有的外设的初始化需要严格的时序,初始化过程中不能被打断。

临界段代码为taskENTER_CRITICAL()

                           taskEXIT_CRITICAL()

上边这段代码是进入临界段代码的具体实现

可以看到:函数内部是先引用的关中断函数

在退出临界段代码的函数中

可以看到,最终是引用了开中断函数

  1. 举例说明

任务级临界段代码保护

中断级临界段代码保护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值