FreeRTOS学习(一)

裸机与RTOS对比

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

  • 实时性差:(应用程序轮流执行)
  • delay:空等待,CPU不执行其它代码
  • 结构臃肿:实现功能都放在无限循环

RTOS:Real Time OS,实时操作系统,强调“实时性”

  • 分而治之:实现功能划分为多个任务
  • 延时函数:任务调度
  • 抢占式:高优先级任务抢占低优先级任务
  • 任务堆栈:每个任务都有自己的栈空间,用于保存局部变量以及任务的上下文信息。

中断可以打断任意任务

FreeRTOS基础知识

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

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

抢占式调度

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

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

时间片调度

同等优先级任务轮流地享有相同的CPU时间(可设置:设置滴答定时器的中断周期),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期。
在这里插入图片描述
Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1。

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

任务状态

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

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

在这里插入图片描述

  • 仅就绪态可以转变成运行态。

系统配置文件详解

FreeRTOSConfig.h配置文件作用:对FreeRTOS进行功能配置和裁剪,以及API函数使能。
相关宏可分为三类:

  • INCLUDE:配置FreeRTOS可选的API函数
  • config:完成FreeRTOS的功能配置和裁剪
  • 其它配置项:PendSV宏定义、SVC宏定义(宏定义给Port.c调用)
#define configUSE_PREEMPTION					1                       //1使用抢占式内核,0使用协程
#define configUSE_PORT_OPTIMISED_TASK_SELECTION	1                       //1启用特殊方法来选择下一个要运行的任务,1:使用硬件计算下一个要运行的任务(使用特殊方法,STM32支持,任务优先级的最大值有限制32(0~31))。0:使用软件算法计算下一个要运行的任务(通用方式,不限制优先级的最大值,效率较低)
#define configUSE_TICKLESS_IDLE					0                       //1启用低功耗tickless模式
#define configCPU_CLOCK_HZ						(SystemCoreClock)       //CPU频率

#define configIDLE_SHOULD_YIELD					1                       //为1时空闲任务放弃CPU使用权给其他同优先级的用户任务
#define configUSE_TASK_NOTIFICATIONS            1                       //为1时开启任务通知功能,默认开启

/***************************************************************************************************************/
/*                                FreeRTOS与内存申请有关配置选项                                                */
/***************************************************************************************************************/
#define configSUPPORT_DYNAMIC_ALLOCATION        1                       //支持动态内存申请
#define configTOTAL_HEAP_SIZE					((size_t)(20*1024))     //系统所有总的堆大小


/*                                FreeRTOS与钩子函数有关的配置选项                                              */
/***************************************************************************************************************/
#define configUSE_IDLE_HOOK						0                       //1,使用空闲钩子;0,不使用
#define configUSE_TICK_HOOK						0                       //1,使用时间片钩子;0,不使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能汽车赛道「年度大奖」揭晓,哪些供应商在细分市场独占鳌头

智能汽车产业链年度细分市场领军供应商,是高工智能汽车研究院在每个年度基于前装量产数据库及定点车型库数据进行综合评价颁发的年度重量级行业奖项。 2022年,是中国乘用车市场从电动化转型升级到全面普及智能化的关键节点。从计算平台、域控制器、传感…

python天狗吃月 青少年编程电子学会python编程等级考试一级真题解析2022年9月

目录 python天狗吃月 一、题目要求 编程实现 二、解题思路 1、图形分析

thinkphp5.0无限极分类及格式化输出详解案例一则

首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是“纽约的子类”。 从pid为0看出,中国和纽约是顶级节点。 因为贵州的pid是1,而中国的id为1…

概率论基础2

文章目录多个random variable条件下的multi random variable 分布和independencemulti random variable continuous**2D normal distribution**two random variable independencemuilti random variable conditional expectional value(discrete)multi random variable conditi…

docker-compose 搭建 MinIO

目录1、搭建单机MinIO1、搭建单机MinIO (1)配置 docker-compose.yml minio: image: minio/minio container_name: "chain-minio" ports: - 9000:9000 # 服务端口 - 9090:9090 # 控制台端口 environment: - "MINIO_ACCESS_KEYadmin"…

【Python入门第四十七天】Python丨NumPy 数组迭代

数组迭代 迭代意味着逐一遍历元素,当我们在 numpy 中处理多维数组时,可以使用 python 的基本 for 循环来完成此操作。 如果我们对 1-D 数组进行迭代,它将逐一遍历每个元素。 实例 迭代以下一维数组的元素: import numpy as n…

Mysql忘记密码或者有修改密码的需求

今天突然有个想法,想要把毕设弄到服务器上去,所以要配置一下环境安装一下使用一下MySQL,导入一下SQL脚本来创建数据;结果长时间不用MySQL密码不记得了,最后参考了一些博主发现可以这样子修改。 1、打开mysql的配置文件…

OA系统是什么意思?企业为什么要用OA办公系统软件?

阅读本文您将了解:1、什么是OA;2、OA系统是什么意思;2、OA系统功能和对企业重要性 什么是OA? OA即办公自动化(Office Automation,简称OA),是将计算机、通信等现代化技术运用到传统…

《剑指offer》——二进制中1的个数

首先,拿到问题不要害怕,我们先来看一下题目说的是什么: 示例1 输入: 10返回值: 2说明: 十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。 示例2 输入&#…

将Linux服务器上的项目上传至Github

使用git上传项目到github常规的步骤继续上传注意事项参考文章常规的步骤 初始化git空间 git init向缓冲区添加想要上传的文件 git add -f /data/xuhongbo/xuhongbo.code/unbiased_sgg_xuhongbo_BCL/maskrcnn_benchmark/*添加备注信息告诉机器,你真的要添加上述文…

vue在input中输入后,按回车,提交数据

vue在input中输入后&#xff0c;按回车&#xff0c;提交数据 1.展示效果如下&#xff1a; 2.代码展示&#xff1a; <div><el-input v-model"toAddNameText" keyup.enter.native"toAddName()" placeholder"回车&#xff0c;即新增该竖杆名称…

【C++】list的使用与模拟实现

目录 一、list介绍 二、list的使用 1、list的构造 2、list capacity 3、list element access 4、list iterator 5、list modifiers 5.1、insert 6、list Operations 6.1、sort 7、list的迭代器失效 三、list模拟实现 1、push_back 2、iterator 3、const iterato…

循环神经网络

循环神经网络(Recurrent Neural Network&#xff0c;RNN)与卷积神经网络一样,都是深度学习中的重要部分。循环神经网络可以看作一类具有短期记忆能力的神经网络。在循环神经网络中&#xff0c;神经元不但可以接收其他神经元的信息&#xff0c;也可以接收自身的信息&#xff0c;…

Python实现PDF转Word文档

1. 模块安装 pip install pdf2docx安装时可能报错&#xff1a; 到 Microsoft C Build Tools 下载C编译环境安装即可。 2. 模块介绍 pdf2docx是一个Python模块&#xff0c;可以用来将PDF文件转换成Word文档。它是基于Python的pdfminer和python-docx库开发的&#xff0c;可以…

toArray转换 java.lang.ClassCastException

[toArray转换踩坑 java.lang.ClassCastException] 问题 List<String> auditOptions Lists.newArrayList(); //一系列灌数据操作 auditOption.add... String[] options (String[]) auditOptions.toArray();报错信息java.lang.ClassCastException: class [Ljava.lang.O…

【Blender】如何在Blender中添加HDRI环境贴图

​ 什么是HDRI环境贴图 环境贴图或HDRI贴图是在Blender中照亮3D场景并实现逼真效果的最有效和最快捷的方法之一。 HDRIs本质上是现实世界照明的快照&#xff0c;其中包含高动态范围成像&#xff08;HDRI&#xff09;的准确照明细节。HDRI是一个包含亮度信息&#xff08;从暗…

ToBeWritten之IoT 技战法

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

VMware ESXi 8.0c - 领先的裸机 Hypervisor (sysin Custom Image)

本站发布 Dell 和 HPE 定制版 ESXi 8.0c 镜像 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 产品简介 VMware ESXi&#xff1a;专门构建的裸机 Hyperviso…

问卷调查怎么帮助餐饮行业?

在餐饮行业中&#xff0c;顾客的口碑占据非常重要的地位&#xff0c;直接影响着门店的销售额。好口碑能一传十、十传百&#xff0c;为门店带来持续不断的流量和收益。所以&#xff0c;在顾客体验这一块&#xff0c;餐饮门店要尤为重视。 某餐饮品牌作为全球知名品牌&#xff0…

MongoDB【使用场景简介体系结构数据模型特点】

目录 1&#xff1a;MongoDB相关概念 1.1&#xff1a;业务应用场景 1.2&#xff1a;MongoDB简介 1.3&#xff1a;体系结构 1.4&#xff1a;数据模型 1.5&#xff1a;MongoDB的特点 1&#xff1a;MongoDB相关概念 1.1&#xff1a;业务应用场景 传统的关系型数据库&#x…