FreeRTOS 任务调度算法

配置

在FreeRTOSConfig.h.文件中,可以通过configUSE_PREEMPTION和configUSE_TIME_SLICING配置调度算法。
configUSE_TICKLESS_IDLE也会影响调度算法,它用来降低系统功耗。
在FreeRTOS中,拥有相同优先级的任务会被交替执行,即Round Robin Scheduling(RR);

在RR调度策略下,一个线程会一直运行。直到:

  • 自愿放弃控制权
  • 被更高优先级的线程抢占
  • 时间片用完
    但是RR算法并不能保证同优先级的每个任务执行时间相同

基于时间片的优先级抢占式调度算法 Prioritized Pre-emptive Scheduling with Time Slicing

配置


相关概念:

示例 每个任务有不同优先级

假设有三个任务,Task1/2/3,Task1有最高优先级;Task2是周期任务,优先级中;Task3优先级低。

  • t5时刻Task3开始运行
  • 当执行到t6时刻,由于Task2周期触发,且优先级比Task3高,所以调度器将CPU控制权交由Task2
  • t7时刻,Task2运行完成,控制权交还Task3继续运行
  • t9时刻,Task2周期触发,开始运行
  • t10时刻,由于Task1优先级最高,此时抢占CPU,控制权交给Task1
  • t11时刻,Task1结束,控制权交还Task2,Task2继续运行
  • t12时刻,Task2结束,控制权交还Task3

示例 相同优先级的情况


Task1优先级高于Task2,Task2优先级和空闲任务相同

  • 正常情况下,由于Task2和Idle优先级相同,所以他们交替执行
  • t6时刻,Task1抢占CPU
  • t7时刻,任务1释放CPU;由于Task2和Idle是交替执行的,在t5~t8这个时间周期中,Task2开始占用CPU

这个例子展示了空闲任务和普通任务的交替执行过程。但是,如果空闲优先级任务有工作要做,但空闲任务没有工作,则可能不需要为空闲任务分配这么多处理时间。

我们可以对configIDLE_SHOULD_YIELD进行配置。

  • configIDLE_SHOULD_YIELD = 1
    此时,如果有其他空闲优先级的任务,空闲任务将会让出控制权
  • configIDLE_SHOULD_YIELD = 0
    此时,除非有高优先级任务抢占发生,否则空闲任务将会保持运行
    如图所示:

    此时configIDLE_SHOULD_YIELD=1。可以看到,空闲优先级任务有了更多的处理时间。

无时间片的优先级抢占式调度算法 Prioritized Pre-emptive Scheduling (without Time Slicing)

算法保留了调度算法,但是没有用到时间片来处理相同优先级的任务。

配置

示例

不使用时间片会使得更少的上下文切换,因此,这样会减小调度器的负载。但是,这样也会导致相同优先级任务的处理时间不同。如下图所示,

由于没有使用时间片,空闲任务会一直占有CPU,直到Task1抢占CPU结束后,Task2才有机会运行。

合作调度 Co-operative Scheduling

配置


当使用合作调度模式时,上下文的切换只发生在

  1. 正在运行的任务进入阻塞态
  2. 任务调用askYIELD()退出

如图所示:

示例

在多任务应用时,如果某个资源一次只能被一个任务访问,否则将会导致程序出错。那么,需要用到这个方式。
比如说,当有两个任务需要通过串口输出,如果允许抢占,那么会导致两个任务冲突。

FreeRTOS 任务调度算法相关推荐

  1. edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...

    接着上一讲 奔腾的心:FreeRTOS 从入门到精通5--详解任务管理上​zhuanlan.zhihu.com 在这一讲中我将要介绍任务的运行模式,同时与可编程控制器(PLC)以及安卓系统的运行模式进 ...

  2. 数据可视化图表类型_数据可视化中12种最常见的图表类型

    数据可视化图表类型 In the current era of large amounts of information in the form of numbers available everyw ...

  3. FreeRTOS初步认识

    源:FreeRTOS初步认识 用了半天时间对FreeRTOS有了一个初步的认识,大概总结一下,其中混杂了系统实现和实际应用方面的问题. 现只是以应用为目的,实现方面待以后进一步研究. 1.FreeRT ...

  4. FreeRtos 那点事

    FreeRTOS(读作"free-arr-toss")是一个嵌入式系统使用的开源实时操作系统.FreeRTOS被设计为"小巧,简单,和易用",能支持许多不同硬件 ...

  5. 从零入门 FreeRTOS 操作系统之任务调度器

    从零入门 FreeRTOS 操作系统之任务调度器 1 任务调度器的概念 FreeRTOS 中提供的任务调度器是基于优先级的全抢占式调度:在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是 ...

  6. FreeRTOS(一)——任务管理

    1. 任务管理 任务就是线程的另一种说法 1.1 实时性 软实时 软件保证线程的切换在一个恰当的时间范围内 硬实时 必须在给定的时间限制内完成,安全气囊是一个明显的例子 大多数嵌入式要满足软硬实时 1 ...

  7. FreeRTOS -- 简介

    FreeRTOS是一个迷你的实时操作系统内核.作为一个轻量级的操作系统,功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能.软件定时器.协程等,可基本满足较小系统的需要. 任务调度机制 ...

  8. FreeRTOS 使用指南

    作为一个轻量级的操作系统,FreeRTOS 提供的功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能等,可基本满足较小系统的需要.FreeRTOS 内核支持优先级调度算法,每个任务可根 ...

  9. freertos使用基础

    FreeRtos快速入门 一,基础知识 1.工作方式简介(不深入介绍原理) 2,移值 3,什么是内存管理 二,API的作用跟使用方法(基础知识) 一,任务管理(怎么创建任务,任务传递参数,删除任务.. ...

最新文章

  1. 前端,校招,面淘宝,指南
  2. JavaFX技巧17:带有AnchorPane的动画工作台布局
  3. oracle中如何创建dblink
  4. js中如果无法获取某个html属性,例如自定义了一个dir属性,但获取总是为空,尝试换个词,因为可能什么关键词冲突了。...
  5. pythonsplit函数_Python split()函数如何工作
  6. mysql empty table_【MySQL】 empty table and delete table.
  7. 《把时间当作朋友》——运用心智获得解放 读书笔记(2)
  8. python读取txt文件数据并存到list中
  9. c语言中波浪线scanf,~scanf 波浪线
  10. java 操作主机,告诉你java怎么实现键盘操作
  11. 工作流:如何将Word尾注转换为普通文本格式
  12. 日志追踪-类加载器-线程上下文类加载器
  13. c语言程序设计21点扑克牌,C语言程序设计-21点扑克牌游戏.pdf
  14. 观展指南|《星火·新生》沉浸式体验展倒计时1天
  15. 关于粽子的生产产线提速
  16. ios html5 audio mp3,H5 audio 微信端 在IOS上不能播放音乐
  17. 智能客服,还有多少AI泡沫?
  18. 一个资深程序员看12306 (三)
  19. c语言表示时间的程序,C语言显示“当前时间”小程序
  20. CubeFS存储技术揭密(1) — 纠删码引擎系统设计

热门文章

  1. tomcat部署静态html网站方法
  2. phpadmin的安装教程
  3. 《德鲁克管理思想精要》读书笔记8 - 时间
  4. 银行储蓄系统 类图 顺序图 E_R图 功能结构图 数据流图 系统流图 逻辑结构设计 关系模式 数据关系表
  5. 11111122266666
  6. 2017年国赛H题_远程幅频特性测试装置训练总结(硬件部分)
  7. Win10 电脑磁盘分区
  8. Git远程库代码回退
  9. 华为云计算IE面试笔记-桌面云中的用户组、虚拟机模板、模板虚拟机、虚拟机组和桌面组的关系及区别。发放完整复制和链接克隆虚拟机时,步骤有什么区别,要怎么选择桌面组?
  10. 腾讯2018秋招笔试真题-小Q的歌单