FreeRTOS学习笔记一——FreeRTOS介绍

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.rhkb.cn/news/435335.html

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

相关文章

设计模式之享元(Flyweight)模式

前言 面向对象很好地解决了 “抽象” 的问题,但是不可避免的要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理 具体需要自己根据需求去评估 定义 “对象性能” 模式。运用…

探索基于知识图谱和 ChatGPT 结合制造服务推荐前沿

0.概述 论文地址:https://arxiv.org/abs/2404.06571 本研究探讨了制造系统集成商如何构建知识图谱来识别新的制造合作伙伴,并通过供应链多样化来降低风险。它提出了一种使用制造服务知识图谱(MSKG)提高 ChatGPT 响应准确性和完整…

探索顶级低代码开发平台,实现创新

文章盘点ZohoCreator、OutSystems等10款顶尖低代码开发平台,各平台以快速开发、集成、数据安全等为主要特点,适用于不同企业需求,助力数字化转型。 一、Zoho Creator Zoho Creator 是一个低代码开发平台,它简化了应用开发中的复杂…

小程序视频编辑SDK解决方案,轻量化视频制作解决方案

面对小程序、网页、HTML5等多样化平台,如何轻松实现视频编辑的轻量化与高效化,成为了众多开发者和内容创作者共同面临的挑战。正是洞察到这一市场需求,美摄科技推出了其领先的小程序视频编辑SDK解决方案,为创意插上翅膀&#xff0…

2024前端技术发展概况

当前前端技术呈现出多方面的发展态势,以下是详细介绍: 前端框架不断演进: React:作为流行的前端框架之一,React 依旧保持着强大的生命力。它具有高效的虚拟 DOM 机制,能够快速更新和渲染页面,极…

pdf页面尺寸裁减

1、编辑pdf 2、点击裁减页面,并在空白区域双击裁减 3、输入裁减数据:

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

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

Angular基础学习(入门 --> 入坑)

目录 一、Angular 环境搭建 二、创建Angular新项目 三、数据绑定 四、ngFor循环、ngIf、ngSwitch、[ngClass]、[ngStyle]、管道、事件、双向数据绑定--MVVM 五、DOM 操作 (ViewChild) 六、组件通讯 七、生命周期 八、Rxjs 异步数据流 九、Http …

关于vue2+uniapp+uview+vuex 私募基金项目小程序总结

1.关于权限不同tabbar处理 uniapp 实现不同用户展示不同的tabbar(底部导航栏)_uniapp tabbar-CSDN博客 但是里面还有两个问题 一个是role应该被本地存储并且初始化 第二个问题是假设我有3个角色 每个角色每个tabbar不一样的,点击tabbar时候会导致错乱 第三个问题…

Windows11安装Docker Desktop教程

目录 一.安装前置步骤 ▐ 开启虚拟化 ▐ 安装WSL2 ▐ 安装Linux环境 二.Windows上安装Docker 一.安装前置步骤 ▐ 开启虚拟化 首先确保虚拟化的开启,打开任务管理器后查看: 确保图中的虚拟化是已启用,没有开启的需要通过BIOS进行开启&…

基于php的在线租房管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

MySQL-联合查询

1.简介 1.1为什么要使用联合查询 在数据设计时由于范式的要求,数据被拆分到多个表中,那么要查询⼀个条数据的完整信息,就 要从多个表中获取数据,如下图所⽰:要获取学⽣的基本信息和班级信息就要从学⽣表和班级表中获…

全网最全软件测试面试题(含答案解析+文档)

一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到开发成功投入使用,并在使用中不断地修改、增补和完善,直到停止该软件的使用的全过程(从酝酿到…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间,你可以按照如下步骤修改SessionAge 这个参数: 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错,则执行步骤4;如果没有报错则执行第5步如果第2步…

react-问卷星项目(2)

流程 husky 一个git hook 工具,即在git commit之前执行自定义的命令,将规范流程化,如执行代码风格的检查,避免提交非规范的代码,在github搜索即可。 这两条是接着执行的,表示创建husky,在文档…

C++【类和对象】(取地址运算符重载与实现Date类)

文章目录 取地址运算符重载const成员函数取地址运算符重载 Date类的实现Date.hDate.cpp1.检查日期合法性2. 构造函数/赋值运算符重载3.得到某月的天数4. Date类 - 天数的操作4.1 日期 天数4.2 日期 天数4.3 日期 - 天数4.4 日期 - 天数 5. Date的前后置/--5.1 前置5.2 后置5.…

fastadmin搜索刷新列表,怎么限制用户频繁点击?

文章目录 fastadmin搜索刷新列表,怎么限制用户频繁点击?解决方案fastadmin事件方法实现完结 fastadmin搜索刷新列表,怎么限制用户频繁点击? fastadmin目前有个很致命的问题,就是用户可以频繁的点击搜索等按钮&#xf…

Linux防火墙-nat表

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

android kotlin Extension扩展函数

1、新建一个kt文件&#xff1a; 2、代码&#xff1a; class User(var name:String)/**扩展函数**/ fun User.Print(){print("用户名 $name") }// 扩展函数 swap,调换不同位置的值 fun MutableList<Int>.swap(index1: Int, index2: Int) {val tmp this[index1…

组合逻辑元件与时序逻辑元件

组合逻辑元件和时序逻辑元件都是数字电路中的基本构建块&#xff0c;但它们在功能和结构上存在显著差异。 1. 组合逻辑元件: 内容: 组合逻辑元件的输出仅取决于当前的输入&#xff0c;而与之前的输入无关。 它们没有记忆功能。 常见的组合逻辑元件包括&#xff1a; 与门 (AND…