【学习FreeRTOS】第2章——FreeRTOS基础知识

1.任务调度

1.1.任务调度简介

调度器就是使用相关的调度算法来决定当前需要执行的哪个任务FreeRTOS 一共支持三种任务调度方式:

  • 抢占式调度针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务
  • 时间片调度针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务
  • 协程式调度:当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务,FreeRTOS现在虽然还支持,但是官方已经表示不再更新协程式调度

1.2.抢占式调度

在这里插入图片描述

  1. 首先Task1在运行中,在这个过程中Task2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行
  2. Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行
  3. Task3运行过程中,Task3阻塞了(系统延时或等待信号量等),此时就绪态中,优先级最高的任务Task2执行
  4. Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占TasK2的运行

总结:

  • 高优先级任务,优先执行
  • 高优先级任务不停止,低优先级任务无法执行
  • 被抢占的任务将会进入就绪态

1.3.时间片调度

同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期
在这里插入图片描述

  1. 首先Task1运行完一个时间片后,切换至Task2运行
  2. Task2运行完一个时间片后,切换至Task3运行
  3. Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1
  4. Task1运行完一个时间片后,切换至Task2运行

总结:

  • 同等优先级任务,轮流执行;时间片流转
  • 一个时间片大小,取决为滴答定时器中断周期
  • 注意没有用完的时间片不会再使用,下次任务Task3得到执行,还是按照一个时间片的时钟节拍运行

2.任务状态

2.1.任务状态简介

FreeRTOS中任务共存在4种状态:

  • 运行态:正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态
  • 就绪态:如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态
  • 阻塞态:如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态
  • 挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态
    在这里插入图片描述
    总结:
  • 仅就绪态可转变成运行态
  • 其他状态的任务想运行,必须先转变成就绪态

2.2.状态列表与事件列表

FreeRTOS中无非就四种状态,运行态,就绪态、阻塞态、挂起态,这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表事件列表
在这里插入图片描述
bit0-bit31:32位的变量,当某个位,置一时,代表所对应的优先级就绪列表有任务存在

  • 调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行
  • 相同优先级的任务会连接在同一个就绪列表上

3.RTOS的任务优先级与中断优先级

在这里插入图片描述

  • 任务优先级:理论可以设置无限个,但是实际使用时往往只设置32个,数值越大优先级越大,任意优先级的中断都可以打断任务。
  • 中断优先级:STM32F1中断优先级有16级(分组4),数值越小优先级越大,任意中断都可以打断任务,中断优先级的n-15可以被RTOS管理(关闭等),往往任务切换(PendSV)和系统时钟(SysTick)切换的优先级设为15。

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

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

相关文章

(3)原神角色数据分析-3

绘图类 在名为“WRITEPHOT.py”的文件中,定义如下绘图方式,则在主页面(app.py)文件中,可通过如下方式调用: from WRITEPHOTO import WriteScatter,WriteFunnel,WriteBarData,WritePie,WriteLineBar 代码如下: "…

【前端】CSS垂直居中的7种方法

文章目录 line-height绝对定位margin:autoflex绝对定位margin:负值定位transformvertical-align:middledisplay:table-cell思维导图 前文:【前端】CSS水平居中的6种方法_karshey的博客-CSDN博客 有很多相似的部分。 line-height 适用于单行的行内元素设置line-he…

N皇后算法的思路是什么?

N皇后问题是经典的回溯算法问题,其目标是在一个NxN的棋盘上放置N个皇后,使得它们彼此之间不能互相攻击,即任意两个皇后都不在同一行、同一列或同一斜线上。 算法的思路如下: 使用递归函数来解决问题。递归函数的参数通常包括当前…

模仿火星科技 基于cesium+角度测量+高度测量+可编辑

1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。 在屏幕的一角,一个友好的提示窗将呈现,随着您的操作,它会为您提供有用的信息和指导。 2. 绘制面积: 轻轻点击鼠标左键&a…

Spring之Aop切面---日志收集(环绕处理、前置处理方式)--使用/教程/实例

Spring之Aop切面---日志收集(环绕处理、前置处理方式)--使用/教程/实例 简介系统登录日志类LoginLogEntity .java 一、环绕处理方式1、自定义注解类LoginLogAop.class2、切面处理类LogoutLogAspect.java 二、前置处理方式:1、自定义注解类Log…

MySQL之 show profile 相关总结

MySQL之 show profile 相关总结 MySQL官网show profile介绍:https://dev.mysql.com/doc/refman/8.0/en/show-profile.html 1. 简介 show profile 和 show profiles 命令用于展示SQL语句的资源使用情况,包括CPU的使用,CPU上下文切换&#xf…

【实战】 九、深入React 状态管理与Redux机制(五) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

Docker 数据管理

文章目录 前言1、Dcoker 文件体系2、volume挂载案例2.1、挂载运行一个容器实例方法1方法2 3、volumes-from 案例4、备份/恢复数据卷5、删除数据卷 前言 为什么要有数据管理? 因为: Docker 是不提供持久化的 ,容器是不稳定的;一个…

mac ssh连接另一台window虚拟机vm

vmware配置端口映射 编辑(E) > 虚拟网络编辑器(N)... > NAT设置(S)... window防火墙,入站规则添加5555端口 控制面板 > 系统和安全 > Windows 防火墙>高级设置>入站规则>新建规则... tips windows查看端口命令:netstat -ano | f…

【从零学习python 】14.Python字符串常见操作(二)

文章目录 count替换内容分隔splitrsplitsplitlinespartitionrpartition 修改大小写capitalizetitlelowerupper 空格处理1. ljust2. rjust3. center4. lstrip5. rstrip6. strip 字符串拼接字符串运算符进阶案例 count 返回 str 在 start 和 end 之间在 mystr 里面出现的次数。 …

EthereumArbitrumOptimism节点搭建

Ethereum节点搭建 Ethereum节点搭建可基于源码或基于docker。这里介绍基于docker的方式搭建。 拉取镜像 docker pull ethereum/client-go 建议将镜像源配置为阿里云的镜像源 启动容器 docker run -itd -p 8545:8545 -p 30303:30303 --name eth -v /data/eth:/root/.ethere…

java-IDEA MAVEN查看依赖树,解决jar包重复和冲突

如果这里面的依赖关系有红线,就说明有包冲突,一般都是版本不一致,可以在idea里下一个插件Maven Helper,点击install并重启IDEA 打开pom.xml文件,在下方会出现Dependency Analyzer,选择它会出现重复依赖列表,选择对应的依赖,右键红…

BI技巧丨利用Index计算半累计

在实际的业务场景中,特别是财务模块和库存管理模块,经常需要我们针对每个月的期初期末进行相关指标计算,这也是我们之前曾经提到的Calculate基础应用——半累计计算。 现在我们也可以通过微软新推出的Index开窗函数来解决这一问题。 INDEX函…

Mapbox加载天地图CGCS2000矢量瓦片地图

1.背景 最近在做天地图的项目,要基于MapBox添加CGCS2000矢量切片数据,但是 Mapbox 只支持web 墨卡托(3857)坐标系的数据。Github有专业用户修改了mapbox-gl的相关代码,支持CGCS2000的切片数据加载,并且修改…

dji uav建图导航系列(一)建图

文章目录 1、uav + rplidir雷达1.2、思岚激光雷达1.3、dji uav的launch文件2、cartographer激光建图2.1、启动文件2.2、config修改2.3、建图过程3、融合odom+laser建图1、uav + rplidir雷达 思岚激光雷达frame为base_laser_link, 无人机frame为base_footprint。 文件uav_lid…

【Python】同步、异步、堵塞、非堵塞、回调

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、Python中的同步异步二、Python中的堵塞非堵塞三、Python中的回调四、异步编程 一、Python中的同步异步 在 Python 中,同步和…

【OS】操作系统中,页框/页帧见解

文章目录 页框大小的取决因素页框大小的查询不同大小的页框,适用于哪些场景? 页框大小的取决因素 页框(Page Frame)是指操作系统中用于存储页面的物理内存块,其大小通常由操作系统的设计和硬件架构决定。在现代计算机…

手动实现 Spring 底层机制 实现任务阶段一编写自己 Spring 容器-准备篇【2】

😀前言 手动实现 Spring 底层机制的第2篇 实现了任务阶段一编写自己 Spring 容器-准备篇【2】 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的…

docker 删除镜像文件

docker 容器里面太多镜像,D盘满了 四 查看和移除镜像 1 查看镜像 docker images 2 移除镜像命令 docker rmi 镜像名称 # 只输入前四位即可 五 实际有效操作 清除所有不使用的资源 docker system prune 这个命令将会删除所有不使用的镜像、容器和数据卷等资…

js 动态设置transformOrigin

transformOrigin属性用于指定元素变换的原点。 // 获取要设置的元素 const element document.getElementById(your-element-id);// 设置transformOrigin属性 element.style.transformOrigin 50% 50%; // 以元素中心为原点// 或者使用变量来设置 const x 0; // x坐标 const …