FreeRTOS-基础知识

一.任务调度器简介

调度器:使用调度相关算法决定当前需要执行那个任务

1.FreeRTOS三种任务调度方式:

(1)抢占式调度:针对优先级不同的任务,优先级高的任务可抢占优先级低的任务(序号越大,优先级越高,与中断相反)

(2)时间片调度:针对优先级相同的任务,当多个任务的优先级相同,任务调度器会在每一次系统时钟节拍到的时候切换任务

(3)协程式调度:当前任务将会一直运行,同时高优先级的任务不会抢占低优先级的任务(不常用)

2.抢占式调度

创建任务1、2、3,优先级依次Task3>Task2>Task1

运行过程:

1.Task1运行时,Task2进入就绪状态,Task2抢占Task1运行

2.Task2运行时,Task3进入就绪状态,Task3抢占Task2运行,当Task3进入阻塞状态(系统延时或等待信号量),此时,就绪状态中优先级最高的任务Task2运行

3.Task3解除阻塞状态,Task3恢复就绪状态,Task3抢占Task2运行

总结:a.高优先级任务,优先执行   b.高优先级任务不停止执行,低优先级任务无法执行

           c.被抢占的任务将会进入就绪状态

3.抢占式调度

        相同优先级的任务轮流享有CPU时间,叫时间片,在FreeRTOS中,一个时间片等于Systick中断周期

创建任务1、2、3,优先级依次Task3=Task2=Task1

运行过程:

1.Task1运行完一个时间片,运行Task2

2.Task2运行完一个时间片,运行Task3

3.Task3运行过程中(还不到一个时间片),Task3阻塞了,此时直接切换到下一个任务Task1运行

4.Task1运行完一个时间片,运行Task2

总结:a.相同优先级的任务,轮流执行;时间片流转   b.一个时间片的大小,取决于滴答定时器的             中断周期      c.没被用完的时间片不会再使用,即下次运行的还是一个完整的时间片

二.任务状态

FreeRTOS中任务存在4种状态:运行态、就绪态、阻塞态、挂起态

1.运行态:正在执行的任务,注意:STM32中,同一时间只能有一个任务处于运行态

2.就绪态:该任务具备被执行的条件,但未被执行

3.任务因延时或外部事件发生,该任务处于阻塞态

4.挂起态:类似于暂停,调用vTaskSuspend()进入挂起态,需要调用解挂函数vTaskResume(),将任务恢复为就绪态

注意:(1)仅就绪态可以转换为运行态     (2)其他状态的任务想运行,必须先转换为就绪态

           (3)这4种状态中,除了运行态,其他三种任务都有对应的任务状态列表

三.任务状态列表

创建任务1、2、3,优先级依次Task3>Task2>Task1

1.任务创建完,存放在就绪列表中,查询状态列表中优先级最高的任务,优先运行

2.当Task3被阻塞了,Task3存放到阻塞列表,此时,运行Task2

3.当Task2被挂起了,Task2存放到挂起列表,此时,运行Task1

4.当Task3恢复为就绪状态,Task3存放到就绪列表中,再次查询,运行Task3

 创建任务1、2、3,4,优先级依次Task4>Task3=Task2=Task1

 1.相同优先级的任务,会链接在同一个就绪列表上,此时,任务运行采用时间调度,每个任务运行一个时间片

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值