FreeRTOS基础知识(一)任务调度

news2025/4/11 8:04:42

1任务调度器简介(熟悉)

1.1抢占式调度

特点:
1、 高优先级抢占低优先级
2、高优先级任务不停止,低优先级无法运行
3、被抢占的任务会进入就绪态
举例
在这里插入图片描述
阐述一下啊Task1 2 3 任务优先级分别为1 2 3 (freertos中数值越大优先级越越大)当Task1就绪Task2 Task3未就绪时Task1 被运行;当Task2 任务就绪后抢占Task1 Task1 变为就绪态;当Task3 就绪后 抢占Task2 Task2变为就绪态;当Task3阻塞时Task2就绪被运行;当Task3 阻塞时间到 抢占Task2。

1.2 时间片调度

用于任务优先级相同
什么是时间片:时间片就是系统滴答定时器1个中断的时间间隔。这个时间片只能是1个而且能通过修改系统时钟修改。
举例

在这里插入图片描述

过程:Task1 2 3 任务优先级相同,那么他们会顺序运行(我认为应该是看就绪列表中任务的排序,应该是谁先创建谁先)Task1运行1个时间片后Task2运行;Task2行1个时间片后Task3运行;依次类推,如果Task3被阻塞了那直接进入Task1继续运行一个时间片。Task3 之间没用完的时间片就没有了。
特点:
1、同等优先级任务,轮流执行;时间片流转
2、一个时间片大小,取决为滴答定时器中断周期
3、注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行

1.3 协成式调度(逐渐不支持了)

2、任务状态(熟悉)

2.1 运行

正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态

2.2 就绪

如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态

2.3 阻塞

延时或等待外部事件 就进入阻塞态

2.4 挂起

类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()
才可以进入就绪态
任务状态转化图
在这里插入图片描述
分析一下运行态可以进入就绪太*(比如被高优先级任务抢占),就绪态也可以进入运行态(轮到该任务优先级任务运行),运行态可以进入挂起太(调用挂起函数),运行态可以进入阻塞太*(阻塞函数被调用),阻塞态可以进入就绪态(阻塞结束),挂起态可以进入就绪态(解挂)。
总结
1、仅就绪态可转变成运行态
2、任何任务状态都可以转化成就绪态
3、其他状态的任务想运行,必须先转变成就绪态

2.5 任务状态列表

除了运行态 其他三个状态都有其对应的任务状态列表
就绪列表 pxReadyTasksLists[x],其中x代表任务优先级数值 一般设置为0-31最大为31
阻塞列表pxDelayedTaskList
挂起列表 xSuspendedTaskList

在这里插入图片描述
任务会根据任务优先级放入不同的任务就绪列表中,新创建的任务挂载到就绪列表中。比如任务优先级为31那么他就放在任务就绪列表31中。
任务运行前先自上而下遍历就绪列表 当有一个就绪列表前的bit位为1时代表该任务就绪。
这里举两个例子
1、任务优先级不同
在这里插入图片描述
任务优先级不同的三个任务task1 task2 task3 当创建任务后task1 2 3 分别被放入pxReadyTasksLists[1]
pxReadyTasksLists[2] pxReadyTasksLists[3]中。任务运行前遍历任务就绪列表这时优先自上而下遍历到pxReadyTasksLists[3]前的bit位为1 task3运行,当task3被挂起或阻塞时pxReadyTasksLists[3]前面的位为0,同时会放到pxDelayedTaskList或xSuspendedTaskList中,此时会遍历到task2 依次类推。task3变回就绪态后又排在task2 1 前面。

任务优先级 相同的 task1 2 3 他们会被放到同一个任务就绪列表中根据时间片依次运行。

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

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

相关文章

C1189#error: WinSock.h has already been included解决方案

最近在做项目移植过程中遇到这个报错&#xff0c;解决了半天。简单记录下解决方案&#xff0c;以供给大家提供一个思路。 原因&#xff1a; 在工程中使用了Boot库之后&#xff0c;使用了socket、tcp相关的头文件&#xff0c;在其他地方还是包括了头文件<windows.h>&…

leetcode的vscode插件无法登陆问题及解决办法

最近打算使用leetcode的vscode提升一下写代码的体验以及尝试debug。但是发现死活登录不上去&#xff0c;无论是账号登录还是cookies登录&#xff0c;尝试百遍都不行&#xff0c;在查阅资料之后&#xff0c;找到了解决办法。 文章目录 1.账号密码正确&#xff0c;插件无法登陆&a…

16-网络安全框架及模型-BiBa完整性模型

目录 BiBa完整性模型 1 背景概述 2 模型原理 3 主要特性 4 优势和局限性 5 应用场景 BiBa完整性模型 1 背景概述 Biba完整性模型是用于保护数据完整性的模型&#xff0c;它的主要目标是确保数据的准确性和一致性&#xff0c;防止未授权的修改和破坏。在这个模型中&#…

Apache Jackrabbit漏洞浅析

Apache Jackrabbit是一个Java开源内容存储库&#xff0c;1.0.0 < 版本 < 2.20.11、2.21.0 < 版本 < 2.21.18存在RMI功能导致的远程代码执行漏洞。 补丁分析 对比补丁前后两个版本&#xff08;https://github.com/apache/jackrabbit/compare/jackrabbit-2.20.10..…

LSTM Siamese neural network

本文中的代码在Github仓库或Gitee仓库中可找到。 Hi, 你好。我是茶桁。 大家是否还记得&#xff0c;在「核心基础」课程中&#xff0c;我们讲过CNN以及LSTM。 卷积神经网络&#xff08;CNN&#xff09;已经在计算机视觉处理中得到广泛应用&#xff0c;不过&#xff0c;2017年…

事务管理解析:掌握Spring事务的必备技能!

AOP事务管理 1.1 Spring事务简介1.1.1 相关概念介绍1.1.2 转账案例-需求分析1.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:创建JdbcConfig配置…

axios配置请求头content-type 和 get/post请求方式

axios配置请求头content-type https://blog.csdn.net/wojiushiwo945you/article/details/107653962 axios 是Ajax的一个插件&#xff0c;axios虽然是一个插件&#xff0c;但是我们不需要通过Vue.use(axios)来使用&#xff0c;下载完成后&#xff0c;只需在项目中引入即可。(一…

用Html和js和layui写一个简单猜拳小游戏

简单学习技术&#xff0c;写了一个小游戏&#xff0c;用html和js写一个简单的小游戏。玩家点击按钮出拳&#xff0c;玩家胜利结果显示绿色&#xff0c;玩家输了结果显示红色&#xff0c;平局结果显示蓝色。 页面效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <…

【C语言】数组

㊙️小明博客主页&#xff1a;➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、什么是数组&#xff1f;二、一维数组的创建和初始化2.1 一维数组的创建2.2 一维数组的初始化2.3 一维数组的使用3.3 一维数组的存储 三、二维数组的创建和初始化3.1 二维数组…

深度学习 | DRNN、BRNN、LSTM、GRU

1、深度循环神经网络 1.1、基本思想 能捕捉数据中更复杂模式并更好地处理长期依赖关系。 深度分层模型比浅层模型更有效率。 Deep RNN比传统RNN表征能力更强。 那么该如何引入深层结构呢&#xff1f; 传统的RNN在每个时间步的迭代都可以分为三个部分&#xff1a; 1.2、三种深层…

虚函数的讲解

文章目录 虚函数的声明与定义代码演示基类Person派生类Man派生类Woman 测试代码动态绑定静态绑定访问私有虚函数总结一下通过成员函数指针调用函数的方式 虚函数的声明与定义 虚函数存在于C的类、结构体等中&#xff0c;不能存在于全局函数中&#xff0c;只能作为成员函数存在…

❀My小学习之排序算法❀

目录 排序算法&#xff08;Sorting algorithm&#xff09;:) 一、定义 二、分类 三、评价标准 排序算法&#xff08;Sorting algorithm&#xff09;:) 一、定义 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的…

【网络技术】【Kali Linux】Wireshark嗅探(一)ping和ICMP

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解ping命令的原理及过程。 二、网络环境设置 本系列实验均使用虚拟机完成&#xff0c;主机操作系统为Windows 11&#xff0c;虚拟化平台选择Oracle VM VirtualBox&#xff0c;组网模式选择“N…

c语言的数组

#在这一篇中介绍三个数组 1.一维数组 2.字符数组 3.二维数组 1.一维数组 数组的定义&#xff1a; 类型 数组名[元素个数] ----这个为数组的定义 #include <stdio.h> int main() {int a[4];//在这里&#xff0c;我定义了一个只能装载4个整数类型元素的数组char b[5…

WPF+Halcon 培训项目实战(1-5):Halcon安装,图像处理,Halcon简单模板匹配

文章目录 前言相关链接项目专栏我个人对就业市场的评价Halcon安装实战1-4&#xff1a;Halcon基础实战5&#xff1a;模板匹配[形状匹配]实战代码 结尾 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主…

IDEA 开发中常用的快捷键

目录 Ctrl 的快捷键 Alt 的快捷键 Shift 的快捷键 Ctrl Alt 的快捷键 Ctrl Shift 的快捷键 其他的快捷键 Ctrl 的快捷键 Ctrl F 在当前文件进行文本查找 &#xff08;必备&#xff09; Ctrl R 在当前文件进行文本替换 &#xff08;必备&#xff09; Ctrl Z 撤…

excel 函数技巧

1&#xff1a;模糊查询 LOOKUP(1,0/FIND(F1062,Sheet1!C$2:Sheet1!C$9135),Sheet1!B$2:Sheet1!B$9135) 函数含义&#xff1a;寻找F列1062行和sheet1中的C2行到C9135行进行模糊查询&#xff0c;返回该行对应的B2行到B9135行的结果。未查到返回结果0 函数公式&#xff1a; LO…

基于Mbed Studio环境下开发STM32

基于Mbed Studio环境下开发STM32 &#x1f4cd;Mbed官网&#xff1a;https://os.mbed.com/ ✨mbed OS是ARM出的一个免费开源的&#xff0c;面向物联网的操作系统。提供了一个定义良好的API来开发C应用程序&#xff1b;集成度很高&#xff0c;类似Arduino&#xff0c;目前并不兼…

Flink on K8S生产集群使用StreamPark管理

&#xff08;一&#xff09;直接部署&#xff08;手动测试用&#xff0c;不推荐&#xff09; Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式&#xff0c;两者对比 Application 模式部署规避了 Session 模式的资源隔离问题、以及客户端资源消耗问题&am…

Linux操作系统基础:从入门到实践

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; Linux操作系统概述 Linux操作系统的定义和主要特点 Linux操作系统与其他操作系统的比较 Linux操作系统在不同领域的应用案例 Linux操作系统的历史 Linux操作系统的起源和发展过程 L…