01_FreeRTOS基础知识

news2025/1/13 15:52:13

目录

裸机与RTOS介绍

裸机与RTOS特点

FreeRtos简介

任务调度简介

抢占式调度

时间片调度

协程式调度

任务状态


裸机与RTOS介绍

假设小明在打游戏,此时女盆友微信回复了信息。

裸机:在裸机上实现是等这游戏打完之后,在去回复女朋友的信息,假设游戏刚刚开始打完需要半小时,那就必须等半小时候才能回复女朋友的信息,此时女朋友会觉得不在乎她,回信息辣么久。

While(1)

{

        打游戏();

        回复信息();

}

RTOS:在RTOS上实现是通过时间片来执行的,内核system定时器中断,获取时间戳,我们可以设置几次中断认为是一个时间片时间,假设1个时间片是1ms,那小明在打游戏1ms游戏的时候,就回去回复信息1ms,不需要回复信息的时候,就继续打游戏。 

Void main(void)

{

        /*创建打游戏任务*/

        xTaskCreate(打游戏);

        /*创建回复信息任务*/

        xTaskCreate(回复信息);

}

Void 游戏(void)

{

        While(1)

        {

                打游戏();

        }

}

Void 回复信息(void)

{

        While(1)

        {

                回复信息();

        }

}

裸机与RTOS特点

裸机:裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序

1.实时性差(应用程序)轮流执行

2.delay空等待,CPU不执行其他代码

3.结构臃肿实现功能都放在无限循环

RTOS:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性

1.分而治之,实现功能划分为多个任务

2.延时函数,任务调度

3.抢占式,高优先级任务抢占低优先级任务

4.任务推栈,每个任务都是有自己的栈空间

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

 

FreeRtos简介

FreeRTOS是一个免费的嵌入式实时操作系统

1.免费开源商业产品使用,无潜在商业风险,无须担心。

2.可裁剪FreeRTOS的核心代码9000+行,包含在3个.c文件中。

3.简单易用,可移植性非常好

4.优先级不限制,任务优先级分配没有限制,多任务可同一优先级

5.任务不限,可创建的实时任务数量没有软件限制

6.抢占/协程/时间片,支持抢占式,协程式,时间片流转任务调度

7.FreeRTOS官网:https://www.freertos.org/

 

任务调度简介

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

FreeRTOS一共支持三种任务调度方式

抢占式调度

抢占式调度:主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务(任务优先级数值越大,优先级越高)

运行条件:

1.创建三个任务: Task1、Task2、Task3

2. Task1、 Task2、 Task3的优先级分别为1、 2、3;在FreeRTos中任务设置的数值越大,优先级越高,所以TASK3的优先级最高。

运行过程如下:

1.首先Task1在运行中,在这个过程中ask2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行

2.Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行

3.Task3运行过程中,Task3阻塞了(系统延时或等待信号量等),此时就绪态中,优先级最高的任务Task2执行

4.Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占TasK2的运行

总结1.高优先级任务,优先执行2.高优先级任务不停止,低优先级任务无法执行3.被抢占的任务将会进入就绪态

时间片调度

时间片调度:主要针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务。同等优先级任务轮流地享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期

运行条件:

1.创建三个任务: Task1、 Task2、 Task3

2.Task1、Task2、Task3的优先级均为1; 即3个任务同等优先级

运行过程如下:

1.首先Task1运行完一个时间片后,切换至Task2运行

2.Task2运行完一个时间片后,切换至Task3运行

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

 

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

协程式调度

协程式调度:当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务FreeRTOS现在虽然还支持,但是官方已经表示不再更新协程式调度

任务状态

FreeRTOS中任务共存在4种状态

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

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

阻塞态:如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态

挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态

四种任务状态之间的转换图:

 

总结:

1.仅就绪态可转变成运行态。

2.其他状态的任务想运行,必须先转变成就绪态。

3.这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表

4.就绪列表pxReadyTasksLists[x],其中x代表任务优先级数值,在初始化的时候有32个优先级列表0到31,每个优先级下面又可以有多个任务,每次都是把列表优先级最高的任务转为运行态。判断就绪列表用32位的变量表示了32个优先列表是否有任务,当某个位,置一时,代表所对应的优先级就绪列表有任务存在调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行相同优先级的任务会连接在同一个就绪列表上,会按顺序执行。

5.阻塞列表pxDelayedTaskList

6.挂起列表xSuspendedTaskList

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

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

相关文章

使用缓存保护MySQL

1 更新缓存最佳实践 Redis的执行器非常薄,所以Redis只支持有限API,几乎没聚合查询能力,也不支持SQL。存储引擎也简单,直接在内存中用最简单数据结构保存数据。 如Redis的LIST在存储引擎的内存中的数据结构就是双向链表。内存是易…

基于ONNX人脸识别实例(SCRFD/ArcFace)-C#版

一、引用 Microsoft.ML.OnnxRuntime OpenCvSharp OpenCvSharp.Extensions二、人脸检测(Face Detection) using System; using System.Collections.Generic; using System.Linq; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp;…

c++11 标准模板(STL)(std::deque)(十)

定义于头文件 <deque> std::deque 修改器 移除首元素 std::deque<T,Allocator>::pop_front void pop_front(); 移除容器首元素。若容器中无元素&#xff0c;则行为未定义。 指向被擦除元素的迭代器和引用被非法化。若元素是容器中的最后元素&#xff0c;则尾后…

2022 数字IC设计秋招复盘——数十家公司笔试题、面试实录

0 引言 秋招结束了。 “今年是前五年最差的一年&#xff0c;也将是后五年最好的一年”&#xff0c;虽然无法预知后面的就业情况&#xff0c;但就我今年自己的亲身经历与去年师兄师姐找工作的情况对比&#xff0c;感觉难度确实是增大了很多。我总共投递了80家左右的公司&#…

德云社相声春晚未播先火,郭德纲独揽三个节目,四位老艺术家助阵

随着央视春晚的二次彩排&#xff0c;德云社相声春晚&#xff0c;也被安排到议事日程当中&#xff0c;听说今年的相声春晚还颇有看点。由于缺少了岳云鹏张云雷等得力干将&#xff0c;郭德纲老师决定亲自下场&#xff0c;一个人就独揽了三个节目。 按说德云社举办相声春晚&#x…

乒乓普及套及廉价底板评测

疫情的末端期间开始打乒乓球&#xff0c;最开始在单位打&#xff0c;后来去了花园和大爷们打。用了几个拍子和胶皮&#xff0c;都是网上最便宜的&#xff0c;现在在野球场能排到前十吧&#xff0c;我打球比较“正”&#xff08;他人评价&#xff09;&#xff0c;大家比较愿意和…

基于Java+SpringBoot+vue+element等动物救助平台设计和实现

基于JavaSpringBootvueelement等动物救助平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

数字人民币创新浪潮来袭,支付机构如何“乘风破浪”?

易观&#xff1a;近年来&#xff0c;数字经济浪潮迭起&#xff0c;数字科技方兴未艾。法定数字货币作为各国政府掌握货币发行控制权的重要载体&#xff0c;正在全球范围内全面铺开。法定数字货币的推出将大幅提升货币的流转效率&#xff0c;为央行管理职能赋予了数字化内涵。可…

Golang 常用字符串函数

统计字符串长度&#xff0c;按字节 len(str)str : "你好" fmt.Println("len", len(str))字符串遍历&#xff0c;同时处理有中文的问题 s : []rune(str)str : "你好" s : []rune(str) for i : 0; i < len(s); i {fmt.Printf("string%c\n&…

安全知识答题小程序v2.0与v3.0的异同点一览

安全知识答题小程序安全知识答题小程序这个软件架构是微信原生小程序云开发。主要包含六大功能模块页面&#xff0c;首页、答题页、结果页、活动规则页、答题记录页、排行榜页。v2.0的功能有以下&#xff1a;排行榜页答题记录页活动规则页微信授权登录获取微信头像和昵称等首页…

SQL SELECT TOP, LIMIT, ROWNUM 子句

SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; Oracle 可以使用…

java后端第五阶段:Git

一、开发场景 备份、代码还原、协同开发、追溯问题代码的编写人和编写时间&#xff01; 安装&#xff1a;直接去官网下载&#xff0c;傻瓜式安装 二、Git常用指令 1.设置用户签名 git config --global user.name 用户名 git config --global user.email 邮箱 2.初始化本地仓…

用存储过程、定时器、触发器来解决数据分析问题

做数据分析或者数据处理&#xff0c;我们也需要掌握这些技能&#xff0c;来解决特定的业务问题。比如&#xff1a;做自动化报表&#xff0c;如果数据需要每天实时更新&#xff08;增量爬虫&#xff09;、定时计算某个业务指标 、想要实时监控数据库表中的数据增、删、改情况等。…

四万字总结Redis语法、配置、实战

文章目录一、安装1.Linux下安装下载解压安装修改配置设置环境变量启动、连接查看redis进程退出2.windows下安装下载并解压二、系统管理1.常用key相关的命令2.时间相关命令3.设置相关命令CONFIG GET & CONFIG SET4.查询信息5.密码设置三、基本数据类型1.Redis strings2.Redi…

Golang常用结构源码01-Map

Golang集合源码-Map 22届211本科&#xff0c;在字节实习了一年多&#xff0c;正式工作了半年&#xff0c;工作主要是golang业务研发&#xff0c;go语言使用和生态比java简洁很多&#xff0c;也存在部分容易遇见的问题&#xff0c;常用结构需要对其底层实现略有了解才不容易写出…

小程序学习笔记

注册小程序账号 www.mp.weixin.qq.com 获取appid 微信开发者工具下载 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 设置代理和外观 创建小程序项目 小程序项目结构 app.json文件 这个文件的第一个路径就是小程序的默认页面 window配置项 …

使用kettle同步全量数据到Elasticsearch(es)--elasticsearch-bulk-insert-plugin应用

背景 为了前端更快地进行数据检索&#xff0c;需要将数据存储到es中是一个很不错的选择。由于公司etl主要工具是kettle&#xff0c;这里介绍如何基于kettle的elasticsearch-bulk-insert-plugin插件将数据导入es。在实施过程中会遇到一些坑&#xff0c;这里记录解决方案。 可能…

Java集合类ArrayList应用 | 二维数组的集合类表示与杨辉三角实现

目录 一、题干 &#x1f517;力扣&#xff1a;118. 杨辉三角 二、题解 1. 思路 2. 完整代码 三、总结 一、题干 &#x1f517;力扣&#xff1a;118. 杨辉三角 二、题解 1. 思路 我们知道杨辉三角的规律是&#xff1a; 每一行的第一列和它的最后一列上的数均为1.除此之…

如何在实验室服务器上跑代码

1.工具准备 可以下载一个xshell或secureCRT或者其他shell工具&#xff0c;通过ssh方式连接服务器&#xff0c;然后通过本地电脑终端控制服务器。连接方式输入主机&#xff08;Host&#xff09;,和端口号&#xff08;一般是22&#xff09;就行了。如下图 连接成功后就可以在本…

java面试题每日10问(1)

1.What is Java? Java is object-oriented, platform-independent, Multithreaded, and portable programming language.it provides its own JRE and API. 2.What is the difference between JDK, JRE, and JVM? JVM Java Virtual Machine provides the runtime environm…