FreeRtos 任务优先级和中断优先级

中断优先级和任务优先级的区别:

          1.简单的说,这两者之间没有任何关系,不管中断的优先级是多少,中断的优先级永远高任何任务的优先级,即在执行的过程中,中断来了就开始执行中断服务程序,

         2.对应STM32F103  F407来说,中断优先级数值越小,优先级就越高,而FreeRTOS的任务优先级是,任务优先级数值越小

任务优先级越低。

 任务优先级配置  

   1. FreeRTOS中任务的最高优先级是通过FreeRTOSConfig.h中的configMAX_PRIORITIES  进行配置的   用户实际可以使用的优先级范围是0- configMAX_PRIORITIES -1,比如我们在此定义为5 那么用户可以使用优先级号 0,1,2,3,4,不包含5,数值越大优先级越高  

  2.建议用户配置configMAX_PRIORITIES 的最大值不要超过32,用户可以使用的范围0-31,根据实际应用配置,配置越大,需要的内存空间越大

  优先级分配方案:

   1.IRQ任务:IRQ任务是指通过中断服务程序进行触发的任务,,所有任务中优先级最高

   2.高优先级后台任务:比如按键检测,触摸检测,USB消息处理

   3.低优先级时间调度任务:比如:emWin的界面显示,LED数码管显示

  note:特别注意IRQ任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数),只有这样高优先级任务才会

 释放CPU的使用权,从而低优先级任务才会有机会得到执行

  在STM32使用由于中断优先级设置采用的是库函数,因此请必须保证优先级设置为可抢占优先级

   NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );只有抢占优先级,优先级为0--15级,数值越大优先级越低

优先级设置介绍:

  FreeRTOSConfig.h中定义了两个宏,分别是:configKERNEL_INTERRUPT_PRIORITY和configMAX_SYSCALL_INTERRUPT_PRIORITY

          configKERNEL_INTERRUPT_PRIORITY用来设置RTOS内涵自己的中断优先级,因为RTOS内涵中断

不允许抢占用户使用的中断,因此这个宏一般为硬件最低优先级

        configMAX_SYSCALL_INTERRUPT_PRIORITY  用来设置可以在中断服务程序中安全调用API函数最高优先级,

如果优先大于这个宏代表的优先级,FreeRtos将无法关闭该中断,不受FreeRtos控制

#ifdef __NVIC_PRIO_BITS /* __NVIC_PRIO_BITS 已经在stm32f4xx.h里面定义为4

*/ #define configPRIO_BITS __NVIC_PRIO_BITS

#else #define configPRIO_BITS 4 #endif

#define configPRIO_BITS  4

此宏定义用于配置STM32的8位优先级设置寄存器实际使用的位数

STM32f103 STM32F407  和STM32F429都是使用高4位。在往寄存器中写值的时候需要移位,

SysTick的优先级我们一般配置为最低,即0xf 。这样可以提高系统的实时响应能力,即其他的外部中断可以及时的得到响应

上面宏定义的FreeRtos优先级为5-15级,在FreeRtos中调用中断关闭中断开启对5-15级有效,对0-4的中断无效

 

      

 

 

  

 

 

                                            

 

 

 

 

  • 19
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS 中,中断优先级任务优先级是两个独立的概念。 中断优先级用于确定不同中断之间的优先级关系。通常,芯片的中断控制器会提供多个中断通道,每个中断通道都有一个可配置的优先级。当多个中断同时发生时,具有更高优先级的中断会被优先处理。 任务优先级用于确定不同任务之间的调度顺序。FreeRTOS 使用优先级抢占调度算法,具有更高优先级任务将抢占正在运行的低优先级任务,以确保高优先级任务能够及时执行。 在 FreeRTOS 中,任务优先级的范围通常是从 0 到 configMAX_PRIORITIES-1,其中 configMAX_PRIORITIES 是 FreeRTOS 配置文件中定义的最大任务优先级数。而中断优先级的范围则取决于芯片和中断控制器的具体实现。 当一个任务和一个中断同时发生时,如果中断的优先级高于或等于任务优先级,则中断会打断任务的执行,并立即执行中断服务程序。当中断服务程序完成后,系统会根据任务优先级重新进行调度。 需要注意的是,中断服务程序(ISR)应该尽量保持简短,并尽可能避免在 ISR 中进行阻塞操作或长时间的计算。这是因为在 ISR 中,任务调度器是被禁止的,而且其他中断也无法打断当前的中断服务程序。因此,长时间的 ISR 可能会导致系统响应性能下降。 总结来说,中断优先级用于确定中断之间的优先级关系,而任务优先级用于确定任务之间的调度顺序。在设计和使用 FreeRTOS 系统时,合理配置中断和任务优先级是至关重要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值