第二章 FreeRTOS的基础知识

FreeRTOS采用抢占式、时间片和协程调度方式管理任务。抢占式调度允许高优先级任务抢占低优先级任务;时间片调度在同等优先级任务间轮转执行;协程调度则不发生抢占。任务有运行、就绪、阻塞和挂起四种状态,仅就绪态任务可直接变为运行态。FreeRTOS使用就绪列表、阻塞列表和挂起列表来管理不同状态的任务。

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

目录

一. 任务调度简介

1.1 FreeRTOS的任务调度方式:

 1.1.1 抢占式调度

 1.1.2 时间片调度

 1.1.3 协程式调度

二. 任务状态

2.1 FreeRTOS中有4种任务状态:

 2.1.1 运行态

 2.1.2 就绪态

 2.1.3 阻塞态

  2.1.4 挂起态     

2.2 FreeRTOS中有3种任务状态列表

 2.2.1 就序列表

 2.2.2  阻塞列表

 2.2.3 挂起列表


一. 任务调度简介

认识调度器就是使用相关的调度算法决定当前需要执行哪个任务。

1.1 FreeRTOS的任务调度方式:

1.1.1 抢占式调度

主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。

总结:

① 高优先级任务,优先执行

② 高优先级任务不停止,低优先级的任务无法执行

③ 被抢占的任务将会进入就绪态


1.1.2 时间片调度

主要是针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务。

总结:

① 同等优先级任务,轮流执行;时间片流转。

② 同等优先级的任务轮流享有相同的CPU时间(时间片),一个时间片的大小,取决于滴答定时器中断周期。

③ 任务中途被打断或者阻塞,没有用完的时间片不会再使用,下次该任务得到执行还是按照一个时间片的时钟节拍运行。


1.1.3 协程式调度

当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级的任务


二. 任务状态

2.1 FreeRTOS中有4种任务状态:

2.1.1 运行态

正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅有一个任务处于运行态。

2.1.2 就绪态

如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态。

2.1.3 阻塞态

如果一个任务因延时或者等待外部事件发生,那么该任务处于阻塞态。

2.1.4 挂起态     

类似于暂停,调用函数vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态。

        

总结:

仅有就绪态的任务可以直接变成运行态

其他状态的任务想执行,必须先转变为就绪态

2.2 FreeRTOS中有3种任务状态列表

2.2.1 就序列表

pxReadyTasksLists[x],其中x代表任务优先级数值(硬件为STM32,所以x取值0~31),32位的变量,当某个位,置一时,代表所对应的优先级就绪列表有任务存在。

调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行 。

若任务的优先级相同,相同优先级的任务会连接在同一个就绪列表上。

                        

2.2.2  阻塞列表

pxDelayedTaskList 

2.2.3 挂起列表

xSuspendedTaskList     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值