FreeRTOS操作系统(详细速通篇)——— 第二章

   本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!

目录

1 FreeRTOS基础知识

1.1 调度方式

1.1.1 抢占式调度

1.1.2 时间片调度

1.2 任务状态与运行列表

1.2.1任务状态

1.2.1 运行列表


FreeRTOS基础知识

1.1 调度方式

       调度的意思为:调度器就是使用相关的调度算法来决定当前需要执行的任务。 FreeRTOS共计有三种调度方式,其主要被使用的为抢占式调度和时间片调度,详情如下所示。

  •  抢占式调度:这种调度方式主要针对优先级不同的任务。每个任务都有一个优先级,高优先级的任务可以中断并抢占低优先级的任务。
  • 时间片调度:这种方式主要用于优先级相同的任务。当多个任务具有相同的优先级时,任务调度器会在每次系统时钟节拍到达时切换任务。
  • 协程式调度(官方不再更新,后续不再进行解释):当前执行的任务会持续运行,即使有高优先级的任务也不会中断和抢占低优先级任务。

1.1.1 抢占式调度

占式调度依赖任务的抢占优先级别,在FreeRTOS中抢占优先级数值越大,任务优先级越高。举例目前有三个任务需要运行:Task1、Task2、Task3。

Task1优先级为:1

Task2优先级为:2

Task3优先级为:3

运行过程如下所示:

1.当Task1在运行时,若Task2变为就绪状态,抢占式调度器将使Task2抢占Task1的运行;

2.当Task2在运行时,若Task3变为就绪状态,抢占式调度器将使Task3抢占Task2的运行;

3.当Task3在运行时,若Task3因系统延时或等待信号量等原因进入阻塞状态,系统将选择就绪态中优先级最高的Task2来执行;

4.当Task3的阻塞状态解除(如延时结束或接收到信号量),Task3将恢复到就绪状态,并抢占Task2的运行。

总结

对于抢占式优先级,我们只需要记住以下三点:

  1. 运行过程中,高优先级任务先执;
  2. 若是高优先级任务没有进入阻塞或者停止,低优先级任务将无法进行运行;
  3. 若任务被抢占后,就会直接进入就绪状态(下文介绍)。

1.1.2 时间片调度

时间片调度主要是用来应对同等优先级任务运行的情况。同等优先级任务它们轮流享有相同的运行时间(时间片),在该系统中一个时间片就相当于系统抵达定时器的一个中断周期。

同样举例来说:Task4、Task5、Task6的优先级为相同的三个任务。

运行过程如下所示:

1.Task4运行完一个时间片之后,将会切换到Task5进行运行;

2.Task5运行完一个时间片之后,将会切换到Task6进行运行;

3.Task6运行完一个时间片之后,将会切换到Task4进行运行;

4.最终按照此顺序进行运行。

总结

对于抢占式优先级,我们只需要记住以下三点:

1.具有相同优先级的任务会轮流执行,采用时间片轮转调度;

2.时间片的大小由滴答定时器中断的周期决定;

3.未用完的时间片不会被保留,下次任务执行时仍然按照一个完整的时间片时钟节拍运行。

1.2 任务状态与运行列表

1.2.1任务状态

在FreeRTOS中,任务有四种状态:运行态、就绪态、阻塞态、挂起态。

1.运行态:任务正在被执行时处于运行态。在STM32中,同一时间仅有一个任务处于运行态。

2.就绪态:任务已准备好执行,但尚未被调度运行时处于就绪态。

3.阻塞态:任务因延时或等待外部事件而无法继续执行时处于阻塞态。

4.挂起态:类似于暂停状态。任务通过调用函数vTaskSuspend()进入挂起态,需调用解挂函数vTaskResume()才能返回到就绪态。

系统状态转化图

        上图为系统之间状态的转换图。由于运行态的任务只能有一个,运行态只能由就绪态任务进行转换,但进入就绪态的任务可以转换为其他三种状态。需要进行强调的为挂起状态,在将任务采用函数挂起之后,任务无法运行。如果不调用函数将其进入就绪态,其将一直无法运行。

1.2.1 运行列表

    运行状态只有一个,而就绪状态、阻塞状态、挂起状态有多个,因此就需要相对的列表。分别为就绪列表、阻塞列表、挂起列表。而调度器总是会处于就绪的列表之中,选择其中优先级最高的任务进行执行。

列表

       本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。期待诸君的关注点赞!

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值