重新开始学stm32 FreeRTOS系统(3)——中断管理

这一期我们讲 FreeRTOS 的中断管理,中断管理是个重点和难点,这里我们只是简单讲一些表面的东西,想要吃透需要我们花时间去认真专研。


FreeRTOS系统中断管理

关于Cortex-M内核的中断内容非常多且复杂,我们在这里就不讲了,想了解的可以参考Cortex-M的手册,我们需要了解的内容是 FreeRTOS 的中断配置宏,一共有 5 个。

第一个中断配置宏是 configPRIO_BITS ,此宏用来设置 MCU 使用几位优先级,STM32 使用的是 4 位,因此此宏为 4。

第二个中断配置宏是 configLIBRARY_LOWEST_INTERRUPT_PRIORITY , 此宏是用来设置最低优先级,STM32 优先级使用了 4 位,而且 STM32 配置的使用组 4(一定的),也就是 4 位都是抢占优先级。因此优先级数就是 16 个,最低优先级那就是 15,所以此宏就是 15。(有人会问了,为什么 STM32 配置的一定使用组 4 ,那是因为 FreeRTOS 的中断配置没有处理亚优先级这种情况,所以要求全部为抢占优先级。)

第三个中断配置宏是  configKERNEL_INTERRUPT_PRIORITY ,此宏用来设置内核中断优先级,了解一些即可。

第四个中断配置宏是  configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY ,此宏用来设置 FreeRTOS 系统可管理的最大优先级,这个大家可以自由设置,默认设置为了 5。也就是高于 5 的优先级(优先级数小于 5)不归 FreeRTOS 管理。

第五个中断配置宏是  configMAX_SYSCALL_INTERRUPT_PRIORITY ,此宏其实就是 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 左移 4 位而来的。所以上面我们讲的五个宏我们可以按照我们需要设置的就只有第四个,其他的我们都是了解一下,知道有这个东西就行。


FreeRTOS开关中断函数

FreeRTOS 开关中断函数为 portENABLE_INTERRUPTS()portDISABLE_INTERRUPTS()
这两个函数其实是宏定义,这里我们可以了解一下,在使用的时候直接使用上面的两个即可。

#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0)

使用portENABLE_INTERRUPTS()是开启中断,使用portDISABLE_INTERRUPTS()关闭中断,这里开启和关闭的并不是所有中断,而是我们上面设置的 FreeRTOS 可以管理的中断,即中断优先级高于上面讲到的第四个中断配置宏所设置的优先级的中断就无法使用它们开启关闭了。


临界段保护

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如有的外设的初始化需要严格的时序,初始化过程中不能被打断。FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。FreeRTOS 系统本身就有很多的临界段代码,这些代码都加了临界段代码保护,我们在写自己的用户程序的时候有些地方也需要添加临界段代码保护。

FreeRTOS 与 临 界 段 代 码 保 护 有 关 的 函 数 有 4 个 : taskENTER_CRITICAL()
taskEXIT_CRITICAL() taskENTER_CRITICAL_FROM_ISR()
taskEXIT_CRITICAL_FROM_ISR(),这四个函数其实也是宏定义。这四个函数的区别是前两个是任务级的临界段代码保护,后两个是中断级的临界段代码保护。


好了,今天与 FreeRTOS 的认识就到这里,关于中断管理的实验,其实非常简单,就是写两个中断,什么中断都可以,分别把优先级设置成一个高于可管理最大优先级,一个低于可管理最大优先级,使用上面讲到的中断开启和关闭函数,在开启中断时和关闭中断时分别看看中断死否触发即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值