FreeRTOS学习笔记一——FreeRTOS介绍

news2024/9/30 4:49:21

RTOS学习笔记,主要参考正点原子教程

目录

  • FreeRTOS特点
  • 任务调度方式
    • 抢占式调度
    • 时间片调度
  • 任务状态
    • 状态转换
    • 任务列表

FreeRTOS特点

  1. 实现多个任务功能划分
  2. 延时函数实现任务调度
  3. 高优先级抢占低优先级
  4. 每个任务都有自己的栈空间

注意:
中断可以打断任意任务
任务可以同等优先级

任务调度方式

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

  1. 抢占式调度(不同优先级抢占时间)
  2. 时间片调度(同优先级轮流享有相同的CPU时间)
  3. 协程调度(当前任务一直进行,高优先级不抢占低优先级,不维护了)

抢占式调度

在这里插入图片描述
运行过程如下:

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

总结和注意:

  1. 高优先级任务,优先执行。
  2. 高优先级任务不停止,低优先级任务无法执行。
  3. 被抢占的任务将会进去就绪态。
    数值越大,优先级越高

时间片调度

一个时间片等于一个SysTick周期
在这里插入图片描述

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

总结和注意:

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

任务状态

状态转换

  1. 运行态 :正在执行的任务,该任务就处于运行状态。注意:在STM32中,同一时间仅一个任务处于运行态。
  2. 就绪态 :如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态,等待更高优先级结束运行态。
  3. 阻塞态 :如果一个任务因为延时或者等待外部事件发生,那么这个任务就处于阻塞态。
  4. 挂起态 :类似于暂停,调用函数vTaskSuspend()进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态。

在这里插入图片描述

注意和总结:

  1. 只有就绪态才可以直接进入运行态
  2. 其他任务想要进入运行态,首先要进入就绪态
  3. 除了运行态,其他三种任务状态的任务都有其对应的任务状态列表

任务列表

就绪列表 : pxReadyTasksLists[x],其中x代表人物优先级数值。
阻塞列表 :pxDelayedTaskList
挂起列表 :xSuspendedTaskList

注意:

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

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

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

相关文章

Spring依赖注入推荐使用构造函数注入而非@Autowired

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl在Spring框架中,依赖注入(Dependency Injection, DI)是实现组件之间松耦合的关键技术。Spring支持多种依赖注入方式,其中构造函数注入和基于@Autowired注解的注入是两种常见的方法。然而,Spri…

活体检测标签之2.4G有源RFID--SI24R2F+

首先从客户对食品安全和可追溯性的关注切入,引出活体标签这个解决方案。接着分别阐述活体标签在动物养殖和植物产品方面的应用,强调其像 “身份证” 一样记录重要信息,让客户能够了解食品的来源和成长历程,从而放心食用。最后呼吁…

手机USB连接不显示内部设备,设备管理器显示“MTP”感叹号,解决方案

进入小米驱动下载界面,等小米驱动下载完成后,解压此驱动文件压缩包。 5、小米USB驱动安装方法:右击“计算机”,从弹出的右键菜单中选择“管理”项进入。 6、在打开的“计算机管理”界面中,展开“设备管理器”项&…

VS开发 - 静态编译和动态编译的基础实践与混用

目录 1. 基础概念 2. 直观感受一下静态编译和动态编译的体积与依赖项目 3. VS运行时库包含哪些主要文件(从VS2015起) 4. 动态库和静态库混用的情况 5. 感谢清单 1. 基础概念 所谓的运行时库(Runtime Library)就是WINDOWS系统…

【易上手快捷开发新框架技术】nicegui标签组件lable用法庖丁解牛深度解读和示例源代码IDE运行和调试通过截图为证

传奇开心果微博文系列 序言一、标签组件lable最基本用法示例1.在网页上显示出 Hello World 的标签示例2. 使用 style 参数改变标签样式示例 二、标签组件lable更多用法示例1. 添加按钮动态修改标签文字2. 点击按钮动态改变标签内容、颜色、大小和粗细示例代码3. 添加开关组件动…

RFID系统如何革新资产信息数字化管理

在现代企业中,资产管理的有效性直接影响整体运营效率和成本控制。为了应对传统资产管理中存在的诸多挑战,越来越多的公司开始采用RFID系统,以实现资产信息的数字化管理,从而提高资产利用率和管理透明度。 RFID系统的主要优势 高…

【USB】USB1.0、USB1.1、USB2.0、USB3.0、USB4.0介绍及最大速率说明

USB 1.0 and USB 1.1 1995 年,成立了 USB-IF,该组织于次年宣布推出 USB 1.0。USB 1.0 规定的数据速率为 1.5 Mbit/s(低带宽或低速),最大输出电流为 5V/500mA。但不幸的是,这个 USB 版本也很少被制造商采用。…

C++ string的基本运用详细解剖

string的基本操作 一.与C语言中字符串的区别二.标准库中的string三.string中常用接口的介绍1.string中常用的构造函数2.string类对象的容量操作函数3.string类对象的访问及遍历操作4.string类对象的修改操作5.string类的非成员函数6.string中的其他一些操作 一.与C语言中字符串…

网页WebRTC电话和软电话哪个好用?

关于WebRTC电话与软件电话哪个更好用,这实际上取决于多个因素,并没有一个绝对的答案。不过,我可以根据WebRTC技术的一些特点,以及与传统软件电话相比的优劣势,为你提供一个清晰的对比。 首先,让我们了解一下…

python画图|放大和缩小图像

在较多的画图场景中,需要对图像进行局部放大,掌握相关方法非常有用,因此我们很有必要一起学习 【1】官网教程 首先是进入官网教程,找到学习资料: https://matplotlib.org/stable/gallery/subplots_axes_and_figures…

uniapp在线打包的ios后调用摄像头失败的解决方法

uniapp在线打包的ios后调用摄像头失败的解决方法 解决方法: 由于未选中打包模块的配置 当你在测试时发现能够正常的开启摄像头,但是当你对其进行在线打包后,发现当你点击启用摄像头时,没有反应,或者是打开是黑屏状态…

STM32F103C8----3-1 LED闪烁(跟着江科大学STM32)

一,电路图 接线图 面包板的的使用请参考:《面包板的使用_面包板的详细使用方法-CSDN博客》 二,目的/效果 2.1 推婉输出 外部供电(熄的时间长) 2.2 推婉输出 内部供电(亮的时间长) 三,创建Keil项目 详…

无人机之集群控制及应用

一、无人机集群控制 无人机集群控制是指通过先进的通信、导航和控制算法,实现多架无人机之间的协同、协调和高效的任务执行。其关键技术包括: 通信技术:实现无人机之间的实时数据传输和共享,确保集群控制的准确性和稳定性。 路径…

RabbitMQ 高级特性——TTL

文章目录 前言TTL设置消息的 TTL设置队列的 TTL 前言 对于前面讲到的重试机制中,当确认策略为 MANUAL 手动确认的时候,如果消费者出现了程序逻辑错误,那么消息就无法被争取处理,那么就会执行 basicNack 方法,如果我们…

黑马头条day7-app端文章搜索

今天的内容也只是跑了一下 对于具体的实现掌握的很差 仔细看 es 在微服务学的es使用基本忘光了 这里用起来一点都熟悉 重学!!! kafka异步 文章自动构建索引的时候用到了‘’ mongoDB 用来存储用户的搜索记录 遗忘(拦截器 j…

【有啥问啥】In-Context Learning(上下文学习):深入解析与应用实践

In-Context Learning(上下文学习):深入解析与应用实践 引言 在人工智能与机器学习的浪潮中,In-Context Learning(上下文学习)作为一种新兴的学习范式,正逐渐崭露头角。与传统的机器学习模型不…

第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)征稿

第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)由湖南第一师范学院主办,南京师范大学、山东女子学院、爱迩思出版社(ELSP)协办。 大会将专注于机器人、数字化、自动化、人工智能等技术的开发和融合&#xff0c…

Go实现RabbitMQ 死信队列、优化

死信队列是什么? 如何配置死信队列? go实现死信队列 go使用发布订阅模式改造批量发送消息 【教学内容】 1. 死信队列是什么? 注意:业务队列与死信交换机的绑定是在构建业务队列时,通过参数(x-dead-le…

计算机网络基础--认识协议

目录 前言 一、IP地址与端口 二、网络协议 1.网络体系结构框架 2.网络字节序 前言 提示:这里可以添加本文要记录的大概内容: 计算机网络涉及非常广泛,这篇文章主要对计算机网络有个认识 提示:以下是本篇文章正文内容&#x…

SNMP和Syslog有啥区别

在网络管理的世界中,SNMP(简单网络管理协议)和 Syslog(系统日志)是两种关键技术,它们分别在监控和管理网络设备方面发挥着重要作用。选择合适的工具对于确保网络的高效运行、优化性能和增强安全性至关重要。…