2.FreeRTOS系统任务调度简介及任务状态

news2024/9/20 1:24:27

目录

一、基础知识

1、FreeRTOS 任务状态

(1)运行态

(2)就绪态

(3) 阻塞态

(4) 挂起态

二、任务调度简介

1.抢占式调度

2.时间片调度

3.协程式调度


一、基础知识

1、FreeRTOS 任务状态

        FreeRTOS 中任务存在四种任务状态,分别为运行态、就绪态、阻塞态和挂起态。FreeRTOS 运行时,任务的状态一定是这四种状态中的一种。

(1)运行态

        如果一个任务得到 CPU 的使用权,即任务被实际执行时,那么这个任务处于运行态。如果 运行 RTOS 的 MCU 只有一个处理器核心,那么在任务时刻,都只能有一个任务处理运行态。

(2)就绪态

        如果一个任务已经能够被执行(不处于阻塞态后挂起态),但当前还未被执行(具有相同优 先级或更高优先级的任务正持有 CPU 使用权),那么这个任务就处于就绪态。

(3) 阻塞态

        如果一个任务因延时一段时间或等待外部事件发生,那么这个任务就处理阻塞态。例如任 务调用了函数 vTaskDelay(),进行一段时间的延时,那么在延时超时之前,这个任务就处理阻塞 态。任务也可以处于阻塞态以等待队列、信号量、事件组、通知或信号量等外部事件。通常情 况下,处于阻塞态的任务都有一个阻塞的超时时间,在任务阻塞达到或超过这个超时时间后, 即使任务等待的外部事件还没有发生,任务的阻塞态也会被解除。

(4) 挂起态

        任务一般通过函数 vTaskSuspend()和函数 vTaskResums()进入和退出挂起态与阻塞态一样, 处于挂起态的任务也无法被运行。

他们四种任务状态的转换图如下图所示:

总结:

1、仅就绪态可转变成运行态

2、其他状态的任务想运行,必须先转变成就绪态。

3、FreeRTOS中无非就四种状态,运行态、就绪态、阻塞态、挂起态。这四种状态,除了运行态,其他任务状态的任务都有其对应的任务状态列表。

  • 就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值

我们如何知道x中有任务呢?

我们定义一个变量,当某个为置一时,代表所对应的优先级就序列表有任务存在。

  • 阻塞列表:pxDelayedTaskList
  • 挂起列表:xSuspendedTaskList

二、任务调度简介

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

FreeRTOS 一共支持三种任务调度方式,分别为抢占式调度、时间片调度和协程式调度。

1.抢占式调度

        抢占式调度主要时针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可 以抢占优先级低的任务,只有当优先级高的任务发生阻塞或者被挂起,低优先级的任务才可以 运行。配置的数字越大,他的优先级就越大。

接下来看一下抢占式调度的运行条件和运行过程

运行条件

1、 创建三个任务分别是:Task1、Task2、Task3

2、Task1、Task2、Task3的优先级分别为1、2、3;在FreeRTOS中任务设置的越大,优先级越高,其中Task3的优先级最高。

运行过程如下:

1、Task1在运行过程中,在这个过程中Task2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行。

2、Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行。

3、Task运行过程中,Task3阻塞了(系统延时或者等待信号量等),此时就绪态中,优先级最高的任务Task2执行。

总结:

1、高优先级任务,优先执行

2、高优先级任务不停止,低优先级任务无法执行

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

2.时间片调度

        时间片调度主要针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每 一次系统时钟节拍到的时候切换任务,也就是说 CPU 轮流运行优先级相同的任务,每个任务运 行的时间就是一个系统时钟节拍。

        同等优先级任务轮流享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期。
接下来看一下时间片调度的工作过程和运行条件

运行条件”

1、创建三个任务:Task1、Task2、Task3

2、Task1、Task2、Task3的优先级均为1;即3个任务同等优先级

运行过程如下:

1、首先Task1运行完一个时间片后,切换到Task2运行

2、Task2运行完一个时间片后,切换到Task3运行

3、Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1

4、Task1运行完一个时间片后,切换到Task2运行。

总结:

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

2、一个时间片大小,取决于滴答定时器中断周期。

3、注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行。

3.协程式调度

        官方不再更新,所以了解即可

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

问:如果task1、task2、task3,优先级均为1呢?

答:相同优先级的任务会连接在同一个就绪列表上,task1会运行一个时间片,task2运行一个时间片,task3运行一个时间片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Word模板替换,并转PDF格式输出,Linux服务器乱码问题解决

Poi-tl参考文档地址:http://deepoove.com/poi-tl/1.8.x/#hack-loop-table word模板替换,转pdf 1. 依赖引入:2. word模板配置:3. 示例demo:4 . 效果图5. 本地测试没问题,上Linux服务乱码,出现小方框 1. 依赖…

Python———运行环境搭建

不管用什么工具开发 Python 程序,都必须安装 Python 的运行环境。 目前最常用的是Windows 、 Linux 平台。这里 我们以Windows10为主讲解。 其实编程和平台关系不大。大家也可以使用Linux、Mac。 Windows 平台下 Python 环境搭建 第一步:进入 python 官…

python绘制热力图,数据来源pandas.dataframe

通过pandas.dataframe绘制热力图,并标出颜色最深即z轴数据最大的点。 import matplotlib.pyplot as plt import pandas as pd import numpy as npclass Heatmap:def __init__(self, data, marker*, marker_colorwhite, marker_size10):self.data dataself.size l…

排序的概念,插入排序,希尔排序,选择排序

文章目录 排序的概念排序的概念:排序运用常见的排序与时间复杂度 插入排序希尔排序希尔排序的概念希尔排序总结 选择排序概念 排序的概念 排序的概念: 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小…

【复习《剑指Offer》13-17题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第十三天 7/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

什么是精益创业?精益创业的核心方法有哪些?

《经理人参阅:创业管理学》是一本非常有价值的创业类书籍,为创业者提供了许多实用的方法和经验,特别是关于精益创业方面的内容。精益创业是一种以快速验证假设为核心的创业方法,它可以帮助创业者在最短的时间内找到最有效的商业模…

Kafka跨集群备份解决方案MirrorMaker

文章目录 1 什么是 MirrorMaker?2 运行 MirrorMakerMirrorMaker 配置实例第 1 步:启动两套 Kafka 集群第 2 步:启动 MirrorMaker 工具第 3 步:验证消息是否拷贝成功 3 其他跨集群镜像方案4 小结 一般情况下,我们会使用…

Win2008下使用IIS+URL重写+Server Farms在同一台服务器实现混合 多域名网站与多个负载平衡集群网站 共存,配置及域名绑定笔记

因公司要在现有云服务器增加负载平衡集群网站,但要保证现有在用网站不动,操作系统为Win2008。 以前没有配置过IIS的负载平衡,只能百度一下,实现也简单:只要安装URL重写Server Farms就能实现负载平衡集群网站。于是根据…

IMX6ULL系统移植篇-uboot的烧写与运行

一. uboot 配置与编译 本文来学习 uboot的烧写,承接之前 uboot的配置与编译篇,博文如下: IMX6ULL系统移植篇-uboot的配置与编译_凌肖战的博客-CSDN博客 二. uboot的烧写 uboot 编程成功后,会在 uboot的根目录下生成 u-boot.b…

CentOS Linux的最佳替代方案(三)_银河麒麟Kylin Linux Advanced Server V10 SP2 for X86安装教程

文章目录 CentOS Linux的最佳替代方案(三)_银河麒麟Kylin Linux Advanced Server V10 SP2 for X86安装教程1 银河麒麟Kylin Linux Advanced Server V10简介1.1 同源构建1.2 自主CPU平台深入优化1.3 虚拟化及云原生支持1.4 高可用性1.5 可管理性1.6 内生本…

java阻塞队列/kafka

queue增加删除元素 增加元素 add方法在添加元素的时候,若超出了度列的长度会直接抛出异常:put方法,若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素offer方法在添加元素时,如果发现队列已满…

PCL点云处理之沿着法向量投影点云到平面 (一百九十四)

即使你很爱她,也要保留一些尊严 PCL点云处理之沿着法向量投影点云到平面 (一百九十四) 一、算法介绍二、具体实现1.代码(详细注释)2.效果一、算法介绍 实现这样的目标:沿着法向量,将点云投影到一个平面上 具体步骤: 1计算整个点云的法向量,来确定平面方向 2选择某一点…

IP编址数据转发

目录 一、IP编址 1.1、二进制、十进制和十六进制 1.2、进制之间的转换 1.3、IP编址 1.4、子网掩码 1.5、二进制和十进制转换 1.6、IP地址分类 1.7、IP地址类型 1.8、地址规划 二、VLSM与CIDR 2.1、有类IP编址的缺陷 2.2、变长子网掩码 VLSM 2.3、缺省情况下的掩码 …

红色通信史(四):永不消逝的电波

年龄稍大一点的读者,相信对下面这张剧照并不会感到陌生。 没错,这张经典的剧照,来自曾经家喻户晓的一部红色电影——《永不消逝的电波》。 这部电影上映于1958年,由八一电影制片厂摄制,王苹执导,孙道临、袁…

Qt和MySQL的连接

具体视频的教程 视频教程 我的文章是做一下补充的 流程: 第一点你要确保你的数据库的位数,如果你数据库位数的是32位,mingw编译的时候就需要选择的是32位**(在下面会提到)** 去到所在的文件 点击.pro文件进行编译…

ModaHub魔搭社区:为什么选择Zilliz Cloud?

目录 Zilliz Cloud是什么? 为什么选择Zilliz Cloud? 基于Milvus构建,针对性能进行优化 弹性和可扩展 按需付费 多云支持(AWS、GCP) 云原生的可靠性 企业安全和治理 Zilliz Cloud基于Milvus的云原生服务 Zilliz…

深蓝学院C++基础与深度解析笔记 第 8 章 动态内存管理

第 8 章 动态内存管理 1. 动态内存基础 ● 栈内存 V.S. 堆内存 – 栈内存的特点:更好的局部性,用于语言的固有类型,对象自动销毁,由低到高开辟 – 堆内存的特点:运行期动态扩展,需要显式释放,由高到低开辟…

使用 TailwindCSS 中的 color-mix() 构建自定义调色板

在这篇文章中,我们将了解如何使用 CSS 函数color-mix()和 CSS 变量,通过 TailwindCSS 高效地为 Nuxt 应用程序生成自定义调色板。 先决条件 最好使用以下命令设置 Nuxt 应用程序: npx nuxi init tailwindcss-color-mix 在安装提示期间选择 …

新项目即将启动!小灰做个市场调研

熟悉小灰的小伙伴们都知道,在2019年初,做了整整10年程序员的小灰离开职场,成为了一名自由职业者。 2021年末,小灰注册了自己的公司,名为北京小灰大黄科技有限公司。 公司虽然注册了,但是整个公司只有小灰一…

【C2】文件,时间,多线程,动静态库

文章目录 1.文件:fprint/fgets/fwrite/fread,ftell/rewind/fseek/fflush1.1 文本文件:FILE结构体1.2 二进制文件:没有行概念1.3 文件定位:linux下文本文件模式和二进制文件模式没有区别。fgets和fprintf以行方式读写文…