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

news2024/11/25 23:02:02

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.coloradmin.cn/o/859251.html

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

相关文章

2.CUDA 编程手册中文版---编程模型

2.编程模型 更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划 本章通过概述CUDA编程模型是如何在c中公开的,来介绍CUDA的主要概念。 编程接口中给出了对 CUDA C 的广泛描述。 本章…

linux环形缓冲区kfifo实践3:IO多路复用poll和select

基础知识 poll和select方法在Linux用户空间的API接口函数定义如下。 int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll()函数的第一个参数fds是要监听的文件描述符集合,类型为指向struct pollfd的指针。struct pollfd数据结构定义如下。 struct poll…

Netty的ReplayingDecoder分析

说明 io.netty.handler.codec.ReplayingDecoder是io.netty.handler.codec.ByteToMessageDecoder的一个子类,是一个抽象类,它将字节流解码成其它的消息。需要ReplayingDecoder的子类实现decode(ChannelHandlerContext ctx, ByteBuf in, List out)这个函数…

Selenium 自动化 | 案例实战篇

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站&#xf…

恒盛策略:快跌慢涨是主力洗盘?

当股市一直处于震荡状态,不断重复时。许多股民纷纷开端猜想股市未来走势,同时也有不少人议论着什么是“主力洗盘”和“快跌慢涨”。这儿,咱们来从多个视点来剖析这个问题。 首要,咱们需要了解“主力洗盘”和“快跌慢涨”两个概念。…

leetcode 475. 供暖器(java)

供暖器 供暖器题目描述双指针代码演示 双指针专题 供暖器 难度 - 中等 leetcode 475 题目描述 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。 在加热器的加热半径范围内的每个房屋都可以获得供暖。 现在,给出位于一条水平线上的房屋 ho…

window下部署Yapi接口管理系统部署总结

window下部署Yapi接口管理系统部署总结 YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平…

使用几何和线性代数从单个图像进行 3D 重建

使用几何和线性代数从单个图像进行 3D 重建 萨蒂亚 一、说明 3D重构是一个挑战性题目,而且这个新颖的题目正处于启发和膨胀阶段;因此,各种各样的尝试层出不穷,本篇说明尝试的一种,至于其它更多的尝试,我们在…

uniapp+vue3项目中使用vant-weapp

创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 uni-app官网 (dcloud.net.cn) npx degit dcloudio/uni-preset-vue#vite my-vue3-project打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 yarn install 或 npm install 安装vant…

AI语音工牌在通讯行业营业大厅场景应用

在运营商营业大厅中,每天都有大量的客户来访咨询、办理业务。同时也会经常产生大量的客诉纠纷和服务差评。但因为缺乏有效的管理工具,加上线下沟通场景的数据采集难度高,数字化程度低,管理一直处于盲区。如何有效的管控营业厅人员…

从三个主要需求市场分析,VR全景创业的潜力发展

VR全景,5G时代朝阳产业,其实拍摄制作很简单,就是利用一套专业的相机设备去给商家拍摄,结合后期专业的3DVR全景展示拍摄制作平台,打造3D立体环绕的效果,将线下商家真实环境1:1还原到线上&#xf…

从C语言到C++_31(unordered_set和unordered_map介绍+哈希桶封装)

目录 1. unordered_set和unordered_map 1.1 unordered_map 1.2 unordered_set 1.3 unordered系列写OJ题 961. 在长度 2N 的数组中找出重复 N 次的元素 - 力扣(LeetCode) 349. 两个数组的交集 - 力扣(LeetCode) 217. 存在重…

NIO 非阻塞式IO

NIO Java NIO 基本介绍 Java NIO 全称 Java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 NewIO),是同步非阻塞的。NIO 相关类都被…

AIGC 浪潮下,鹅厂新一代前端人的真实工作感受

点击链接了解详情 原创作者:张波 腾小云导读 AIGC 这一时代潮流已然不可阻挡,我们要做的不是慌乱,而是把握住这个时代的机会。本文就和大家一起来探索在 AIGC 下,前端工程师即将面临的挑战和机遇。聊聊从以前到现在,A…

诸神之战:数字时代的低代码服务商与代理商究竟谁更强?

随着数字化转型浪潮的推进,企业对数字化应用开发的需求迅速增长。低代码作为一种新的软件开发范式,以其可视化和快速构建应用的能力,被广泛应用于成千上万家企业中。当低代码行业的逐渐发展成熟,越来越多的人看到了低代码的商业价…

使用乐观锁解决超卖问题

目录 什么是超卖? 乐观锁和悲观锁的定义 悲观锁: 乐观锁: 乐观锁的实现方式 1.版本号 2.CAS法 什么是超卖? 举个例子:订单系统中,用户在执行下单操作时,可能同一时间有无数个用户同时下单&…

平替版Airtag

Airtag是什么? AirTag是苹果公司设计的一款定位神奇,它通过一款纽扣电池进行供电,即可实现长达1-2年的关键物品的定位、查找的功能。 按照苹果公司自己的话说—— 您“丢三落四这门绝技,要‍失‍传‍了”。 AirTag 可帮你轻松追…

USB(二):Type-C

一、引脚定义 Type-C口有 4对TX/RX差分线,2对USB D/D-,1对SBU,2个CC,4个VBUS和4个地线Type-C母座视图: Type-C公头视图: 二、关键名词 DFP(Downstream Facing Port): 下行端口&#xff0c…

【云原生】Pod的进阶

目录 一、资源限制二、重启策略三、健康检查 ,又称为探针(Probe)3.1示例1:exec方式3.2示例2:httpGet方式3.3示例3:tcpSocket方式3.4示例4:就绪检测3.5示例5:就绪检测2 四、启动、退出…

设置VsCode 将打开的多个文件分行(栏)排列,实现全部显示

目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示 1. 前言 主流编程IDE几乎都有排列切换选择所要查看的文件功能,如下为Visual Studio 2022的该功能界面: 图 1 图 2 当在Visual Studio 2022打开很多文件时,可以按照图1、图2所示找到自…