【FreeRTOS】05 任务的调度:抢占式、协作式、时间片轮转

本节来讲一讲FreeRTOS的任务调度,这是操作系统最核心的功能。

FreeRTOS支持的任务调度方法有抢占式、协作式、时间片轮转,下面分别来讲解。

1)协作式调度

协作式的调度方式,其本质上是任务在运行一段时间后,自己放弃CPU运行权,让其他任务运行。

在FreeRTOS里,是通过taskYIELD()这个函数实现放弃CPU的。一个典型的协作式任务是在while(1){}大循环的最后,调用taskYIELD()去主动放弃CPU;这时其他处于就绪态的最高优先级的任务才可能运行;如果其他任务都不在就绪状态,那么仍然回到taskYIELD()后面继续运行原来的任务。

在FreeRTOS里taskYIELD()是一种放弃CPU执行权的方法,还可以使用我们前面讲的延时函数vTaskDelay,以及后面会讲到的等待信号量、消息队列等等。

我们以一个例子来试验一下协作式的调度方式。

和前几节一样,我们利用cubemx创建工程,创建三个任务,default任务优先级低,Task02和Task03优先级都为高:

在生成的keil工程中,在FreeRTOSConfig.h文件中,将如下宏configUSE_PREEMPTION定义为0,就使能了协作式调度:

三个任务的执行代码如下所示,都是打印输出,然后延时100ms:

注意这里的延时是HAL库的延时,是不放弃CPU的,也就是一旦某个任务取得了CPU执行权,它就一直占用,不会退出。

执行结果如下图,只有task03在运行,task02和defaulttask都没有执行:

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值