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

2023-11-07

目录

一、基础知识

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运行一个时间片。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.FreeRTOS系统任务调度简介及任务状态 的相关文章

  • 消耗服务器带宽的因素有哪些

    消耗 服务器 带宽的因素有 1 网站布局更改使网站页面大小增加 用户获取数据时会加大带宽的消耗 2 网站访客增加使浏览页面数据增加 从而加大对带宽的消耗 3 网页数量增加导致服务器带宽消耗加快 4 突然引起流量峰值 导致带宽使用量增加 5
  • 双系统安装win7出现grub怎么解决

    我们在重装系统时 特别苹果装双系统时 会出现安装过程或者安装后的问题 发现系统开机显示grub 导致不能正常进入系统 让人很是着急 其实出现这种情况是因为系统找不到主引记录所导致 只要重建主引记录mbr即可解决 下面小编就教教大家win7系
  • 实时获取建材网商品数据:API实现详解与代码示例

    一 引言 随着电子商务的快速发展 实时获取商品数据对于企业决策 市场分析以及数据驱动的营销策略至关重要 建材网作为国内知名的建材信息平台 提供了API接口 使得第三方开发者可以方便地获取商品数据 本文将详细介绍如何使用 建材网的API接口
  • TeslaMate特斯拉神器本地Docker部署实现无公网远程访问

    文章目录 1 Docker部署TeslaMate 2 本地访问TeslaMate 3 Linux安装Cpolar 4 配置TeslaMate公网地址 5 远程访问TeslaMate 6 固定TeslaMate公网地址
  • pandas用法整理

    处理表格数据的时候经常用到pandas 每次用的时候都要去查函数 每次记不住 每次都查 哈哈哈 自己整理一下 码住 一 Pandas的数据类型 进行数据分析时 如何正确使用数据类型 这非常重要 在pandas中的数据类型和python原生数
  • Linux中如何查看开启了哪些端口?

    在Linux中 端口是设备与外界通讯交流的出口 常用于指TCP IP协议中的端口 其按照端口号可以分为三类 分别是 公认端口 注册端口 动态端口 那么Linux中如何查看开启了哪些端口 以下是常用命令介绍 1 使用netstat命令 net
  • 数据采集才是MES系统的核心内容

    一 数据采集在MES管理系统中的应用 1 设备数据采集 MES管理系统通过与生产设备的连接 可以实时采集设备运行状态 产量 质量等相关数据 这有助于企业及时掌握设备运行状况 优化设备资源配置 提高设备利用率 2 工艺数据采集 MES管理系统
  • 【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)

    文章目录 1 备份 SD TF 卡为镜像文件 2 压缩镜像文件 2 1 多分区镜像文件的压缩 树莓派 普通 linux 系统等 2 2 单分区镜像文件的压缩 Nvidia Jetson Nano 等 3 还原镜像文件到 SD TF 卡
  • 服务器集群是如何提高计算性能的?

    服务器集群是一种将多台服务器连接起来协同工作的技术 通过集群配置 可以提高计算性能 可靠性和可扩展性 以下是服务器集群如何提高计算性能的详细解释 一 并行处理能力 服务器集群的核心优势在于其并行处理能力 通过将多个服务器组成一个集群 可以将
  • centos系统有什么好处?

    CentOS是一种基于开源代码的Linux操作系统 它有以下几个优势 1 稳定性 CentOS是一种非常稳定的操作系统 它的代码经过了严格的测试和审查 因此它非常适合作为服务器操作系统使 用 2 安全性 由于CentOS是基于开源代码的操作
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写 测试用例 时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计 测试数据 通
  • 如何解决Mybatis-plus与Mybatis不兼容的问题:An attempt was made to call a method that does not exist. The attempt

    博主猫头虎的技术世界 欢迎来到 猫头虎的博客 探索技术的无限可能 专栏链接 精选专栏 面试题大全 面试准备的宝典 IDEA开发秘籍 提升你的IDEA技能 100天精通Golang Go语言学习之旅 领域矩阵 猫头虎技术领域矩阵 深入探索各技
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • ssh:connect to host github.com port 22: Connection timed out

    解决流程 1 将github的端口由22改为443 ssh T p 443 git ssh github com 2 接着输入yes进行确认 The authenticity of host ssh github com 443 192 1
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法

    深入解析统一身份认证 介绍 原理和实现方法 导语 统一身份认证是什么 统一身份认证的原理 统一身份认证的实现 结语 导语 随着互联网的发展和各种在线服务的普及 用户在不同的应用和平台上需要进行多次身份验证 为了简化用户的登录和减少重复操作

随机推荐

  • 打造你的专属印章(c语言)

    制作原理 我们看到屏幕上显示的汉字的字型有两种表达方式 一种称为矢量方式 一种称为点阵方式 其中的点阵方式较为简单 其原理就是好比 铺地砖 有的铺为白色 有的铺为黑色 只要精心安排 就会组成我们希望的图案 当然也可以是汉字 瓷砖越多 铺出的
  • Cursor

    Mac安装使用Mysql教程 从零开始 第一章 Mac安装MySQL 1 1 过程记录 1 2 参考 第二章 安装数据库管理软件DBeaver 2 1 过程记录 2 2 参考 第三章 DBeaver创建MySQL数据库 3 1 过程记录 3
  • 35款 SpringBoot/SpringCloud 开源项目,用来接私活挣钱真爽!

    简介 SpringBoot 是一个非常流行的 Java 框架 它可以帮助开发者快速构建应用程序 他不仅继承了 Spring 框架原有的优秀特性 而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程 最近 小编蹲点各大开源
  • java安全编码规范考试

    java安全编码规范考试 整理不易 收点币 安全编码规范考试 md 下面对zip文件的安全解压缩描述 错误的是 A zip文件解压时 可以使用entry getSize 对解压缩文件进行文件大小判断 B zip文件解压时 需通过边读文件内容
  • springboot shardingsphere 分页插件实现数据库分布式

    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈 它由Sharding JDBC Sharding Proxy和Sharding Sidecar 计划中 这3款相互独立的产品组成 这里我主要用到了Shardin
  • MyBatis3详细教程-从入门到精通

    MyBatis教程 官方教程 https mybatis org mybatis 3 zh getting started html 1 简介 MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBati
  • Google App Engine中使用数据库

    http blog sina com cn s blog 53a802e90100n5id html Google App Engine的教程终于来到了数据库部分 这是GAE最有用 最复杂 也是限制最多的地方 阅读本文需要您懂一般的数据库使
  • DP1 斐波那契数列

    描述 大家都知道斐波那契数列 现在要求输入一个正整数 n 请你输出斐波那契数列的第 n 项 斐波那契数列是一个满足 fib x left begin array rcl 1 x 1 2 fib x 1 fib x 2 x gt 2 end
  • 详细讲解新浪微博的API到底如何使用

    最近一直打算做一个新浪微博的客户端 就需要用到新浪微博的API 但是新浪提供的API可谓是项目繁琐 尤其是关于java的API 三个版本的javaAPI让你蛋碎到极致 weibo4j oauth2 0 weibo4jandroid andr
  • SelectDB X 阿里云沙龙回顾|企业的数据存储、处理与分析之道

    12月30日 SelectDB 携手阿里云共同举办云数仓专场沙龙 在线上沙龙中 来自 SelectDB 和 阿里云的四位云计算领域专家 深入数仓的发展现状和未来趋势 结合企业级的真实场景落地案例 对技术和产品进行了详细的解读 gt gt g
  • stata F值缺失_计量经济学stata代码总结

    答主本来想水掉这次总结 但是身为ikun 就应该像坤坤一样言既出行必果 不能砸了ikun的招牌 接下来我们就开始吧 数据的读取与查看 读取数据集 use 路径 dta 读取Stata系统中的数据 sysuse 文件名 清除上一个数据集 cl
  • 解析新时代所需要的创客教育DNA

    创客与教育的 碰撞 改变的不仅仅是学习方式 更重要的价值在于教学内容的改变 真正的创客教育的课程内容应该是什么样 美国非盈利组织Maker Ed Maker Education Initiative 创客教育倡议 提出 创客教育的任务是给年
  • QtAV的windows编译

    1 编译准备 QtAV的安装编译总指导说明 https github com wang bin QtAV wiki Build QtAV QtAV的源代码 https github com wang bin QtAV FFmpeg的开发依赖
  • 修改 WordPress 搜索结果的链接样式

    站长朋友们在使用WordPress建站的过程中会发现 WordPress 默认的搜索结果页面的链接样式是这个样子的 http www yourdomain com s search query 下面来举个例子说明一下 https www 9
  • Java中使用枚举的方法

    枚举是用于将变量分配给一组预定义常量的特殊数据类型 枚举主要用于将特定范围的值分配给所述变量时 例如 当声明彩虹的颜色时 我们通常被限制在代表各种颜色的7个常量 我们可以用枚举来定义这些颜色 并有一种方法来表示这些常量 枚举是单个这意味着对
  • 《随机函数random(n)的实现》

    随机函数random n 实现 rand 随机函数实现原理 关于 随机数 的产生有许多算法 但无论如何 都不可能产生真正的随机数 因为电脑程序是个确定状态转换机 一种输入必定产生一种确定的输出 但要实现 不可预知 还是可以做到的 只需有 不
  • 非对称加密用私钥还是公钥进行加密[原创]

    经常看到类似的说法 公钥 私钥 一般用来加密 私钥 公钥 一般用来解密 也一直没有仔细去考虑 只是留下了一个用于加密 另外一个用于解密的印象 用公钥加密的数据 只有用私钥才能解密 用私钥加密的数据 也只有公钥才能解密 昨天看书时 又遇到了这
  • Ajax

    jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架 能帮助我们快速的开发JS应用 并在一定程度上改变了我们写JavaScript代码的习惯 废话少说 直接进入正题 我们先来看一些简单的方法 这些方法都是对jQ
  • 【js】根据给定的数组和属性从源数组中获取数据

    想从一个数组中 根据该数组的某个属性值 例如id 取出相对应的数据 可以参考下面的方法 getDataByGivenArray function sourceArray indexArray indexKey var array for v
  • 2.FreeRTOS系统任务调度简介及任务状态

    目录 一 基础知识 1 FreeRTOS 任务状态 1 运行态 2 就绪态 3 阻塞态 4 挂起态 二 任务调度简介 1 抢占式调度 2 时间片调度 3 协程式调度 一 基础知识 1 FreeRTOS 任务状态 FreeRTOS 中任务存在