FreeRTOS 任务调度算法
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
配置
当使用合作调度模式时,上下文的切换只发生在
- 正在运行的任务进入阻塞态
- 任务调用askYIELD()退出
如图所示:
示例
在多任务应用时,如果某个资源一次只能被一个任务访问,否则将会导致程序出错。那么,需要用到这个方式。
比如说,当有两个任务需要通过串口输出,如果允许抢占,那么会导致两个任务冲突。
FreeRTOS 任务调度算法相关推荐
- edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...
接着上一讲 奔腾的心:FreeRTOS 从入门到精通5--详解任务管理上zhuanlan.zhihu.com 在这一讲中我将要介绍任务的运行模式,同时与可编程控制器(PLC)以及安卓系统的运行模式进 ...
- 数据可视化图表类型_数据可视化中12种最常见的图表类型
数据可视化图表类型 In the current era of large amounts of information in the form of numbers available everyw ...
- FreeRTOS初步认识
源:FreeRTOS初步认识 用了半天时间对FreeRTOS有了一个初步的认识,大概总结一下,其中混杂了系统实现和实际应用方面的问题. 现只是以应用为目的,实现方面待以后进一步研究. 1.FreeRT ...
- FreeRtos 那点事
FreeRTOS(读作"free-arr-toss")是一个嵌入式系统使用的开源实时操作系统.FreeRTOS被设计为"小巧,简单,和易用",能支持许多不同硬件 ...
- 从零入门 FreeRTOS 操作系统之任务调度器
从零入门 FreeRTOS 操作系统之任务调度器 1 任务调度器的概念 FreeRTOS 中提供的任务调度器是基于优先级的全抢占式调度:在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是 ...
- FreeRTOS(一)——任务管理
1. 任务管理 任务就是线程的另一种说法 1.1 实时性 软实时 软件保证线程的切换在一个恰当的时间范围内 硬实时 必须在给定的时间限制内完成,安全气囊是一个明显的例子 大多数嵌入式要满足软硬实时 1 ...
- FreeRTOS -- 简介
FreeRTOS是一个迷你的实时操作系统内核.作为一个轻量级的操作系统,功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能.软件定时器.协程等,可基本满足较小系统的需要. 任务调度机制 ...
- FreeRTOS 使用指南
作为一个轻量级的操作系统,FreeRTOS 提供的功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能等,可基本满足较小系统的需要.FreeRTOS 内核支持优先级调度算法,每个任务可根 ...
- freertos使用基础
FreeRtos快速入门 一,基础知识 1.工作方式简介(不深入介绍原理) 2,移值 3,什么是内存管理 二,API的作用跟使用方法(基础知识) 一,任务管理(怎么创建任务,任务传递参数,删除任务.. ...
最新文章
- 前端,校招,面淘宝,指南
- JavaFX技巧17:带有AnchorPane的动画工作台布局
- oracle中如何创建dblink
- js中如果无法获取某个html属性,例如自定义了一个dir属性,但获取总是为空,尝试换个词,因为可能什么关键词冲突了。...
- pythonsplit函数_Python split()函数如何工作
- mysql empty table_【MySQL】 empty table and delete table.
- 《把时间当作朋友》——运用心智获得解放 读书笔记(2)
- python读取txt文件数据并存到list中
- c语言中波浪线scanf,~scanf 波浪线
- java 操作主机,告诉你java怎么实现键盘操作
- 工作流:如何将Word尾注转换为普通文本格式
- 日志追踪-类加载器-线程上下文类加载器
- c语言程序设计21点扑克牌,C语言程序设计-21点扑克牌游戏.pdf
- 观展指南|《星火·新生》沉浸式体验展倒计时1天
- 关于粽子的生产产线提速
- ios html5 audio mp3,H5 audio 微信端 在IOS上不能播放音乐
- 智能客服,还有多少AI泡沫?
- 一个资深程序员看12306 (三)
- c语言表示时间的程序,C语言显示“当前时间”小程序
- CubeFS存储技术揭密(1) — 纠删码引擎系统设计