2021-04-16 FREERTOS任务优先级

FreeRTOS任务优先级

FreeRTOS任务优先级:任务优先级数值越小,任务优先级越低。
一、 FreeRTOS 中任务的最高优先级是通过 FreeRTOSConfig.h 文件中的 configMAX_PRIORITIES 进行
配置的,用户实际可以使用的优先级范围是 0 到 configMAX_PRIORITIES – 1。比如我们配置此宏定
义为 5,那么用户可以使用的优先级号是 0,1,2,3,4,不包含 5。

二、用户配置任务的优先级数值越小,那么此任务的优先级越低,空闲任务的优先级是 0。

三、用户配置宏定义 configMAX_PRIORITIES 的最大值不要超过 32,即用户任务可以使用的优先级
范围是0到31

相同优先级

如果用户在 FreeRTOSConfig.h 文件中配置宏定义 configUSE_TIME_SLICING  1,或者没有配置
此宏定义,时间片调度都是使能的。
 另外,只要芯片资源允许,可以配置任意多个同优先级任务,相同优先级则任务轮询运行。

(备注:没有定义 configUSE_TIME_SLICING,也能使用时间片调度是因为此宏定义默认已经在
FreeRTOS.h 文件中使能)

在这里插入图片描述
中断优先级
无论何时中断的优先级都是最高的,中断的优先级永远高于任何任务的优先级,即任务在执行的过程中,中断来了就开始执行中断服务程序。一般配置为NVIC_PriorityGroup_4,0-15的优先级。0为最高,15为最低。

#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			15                      //中断最低优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	5                       //系统可管理的最高中断优先级
#define portDISABLE_INTERRUPTS()				vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS()					vPortSetBASEPRI( 0 )

portDISABLE_INTERRUPTS(); 将优先级小于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY的中断屏蔽,即中断优先级为5-15的中断全部屏蔽。0-4的中断无法屏蔽。
portENABLE_INTERRUPTS() ;将全部中断打开。

IRQ 任务:IRQ 任务是指通过中断服务程序进行触发的任务,此类任务应该设置为所有任务里面优先级最高的

 特别注意:IRQ 任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数即可),只有
这样,高优先级任务才会释放 CPU 的使用权,,从而低优先级任务才有机会得到执行。

时间片任务

#define configUSE_PREEMPTION					1                       //1使用抢占式内核,0使用协程
#define configUSE_TIME_SLICING					1						//1使能时间片调度(默认式使能的)
```c
同等优先级任务来说, 每个任务允许运行一个时间片.这个任务消耗完一个时间片,
那么CPU的使用权,将会移交给同等优先级下的另一个任务.使用,如此反复, 直到次优先级完全对CPU使用权进行释放.

```c
#define configTICK_RATE_HZ						(1000)                  //时钟节拍频率,这里设置为1000,周期就是1ms

这里设置为1ms则表示单个任务的时间片为1ms,运行完1ms后强制切换到下一个任务,以此循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值