【STM32】入门(十四):FreeRTOS-任务

news2024/11/18 7:43:56

1、简述

FreeRTOS应用程序由一组独立的任务构成。
在任何时间点,应用程序中只能执行一个任务,FreeRTOS调度器负责决定所要执行的任务。
每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 FreeRTOS的调度器本身。
FreeRTOS调度器负责确保任务调入时的处理器上下文(寄存器值、堆栈内容等)与任务调出时的处理器上下文完全相同。为实现这一点,每个任务都分配有自己的堆栈。当任务调出时,执行上下文被保存到该任务的堆栈中,以便以后再调入相同的任务时可以准确地恢复其执行上下文。

2、任务状态

任务状态有四种:运行Running、准备就绪Ready、阻塞Blocked、挂起Suspended
在这里插入图片描述

1)运行状态
任务正在使用处理器,执行实际任务。
如果运行 FreeRTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。

2)准备就绪
准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态),但目前没有执行,因为同等或更高优先级的不同任务已经处于运行状态。

3)阻塞
如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。
例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个"超时"期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。

“阻塞”状态下的任务不使用任何处理时间,不能被选择进入运行状态。

4)挂起
与“阻塞”状态下的任务一样, “挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。 相反,任务只有在分别通过 vTaskSuspend() 和 xTaskResume() API 调用明确命令时 才会进入或退出挂起状态。

3、任务优先级

1)优先级高的先执行
FreeRTOS 调度器总是将优先级高的已就绪的任务,转为运行状态。换句话说,被置于运行状态的任务 始终是可运行的最高优先级任务。

低优先级数字表示低优先级任务。 空闲任务的优先级为零 (tskIDLE_PRIORITY)。

2)相同优先级的任务
任意数量的任务可共用相同的优先级。 如果 configUSE_TIME_SLICING 未经定义, 或者如果 configUSE_TIME_SLICING 设置为 1,则相同优先级的就绪状态任务将使用时间切片轮询调度方案共享可用的处理时间 。

3)有多少个优先级?
每个任务均被分配了从 0 到 ( configMAX_PRIORITIES - 1 ) 的优先级
其中 configMAX_PRIORITIES 在 FreeRTOSConfig.h 中定义。

4)configMAX_PRIORITIES设置为多大?
如果正在使用的端口实现了端口优化的任务选择机制,该机制使用 “前导零计数”类指令(用于单个指令中的任务选择)且 在 FreeRTOSConfig.h 中将 configUSE_PORT_OPTIMISED_TASK_SELECTION 设置为 1,则 configMAX_PRIORITIES 不得大于 32。 在所有其他情况下,configMAX_PRIORITIES 可以采取任何合理范围内的值,但出于 RAM 使用效率的原因,应保持在实际需要的最小值。

4、任务调度

FreeRTOS 调度算法, 主要针对单核、非对称多核 (AMP)、和对称多核 (SMP) RTOS 配置。调度算法是决定哪个 RTOS 任务应处于运行状态的软件程序。在任何给定时间, 每个处理器核心只能有一个任务处于运行状态。在 AMP 中, 每个处理器核心运行自身的 FreeRTOS 实例。在 SMP 中, 存在一个 FreeRTOS 实例,可以跨多核调度 RTOS 任务 。

默认 RTOS 调度策略(单核)
FreeRTOS 默认使用固定优先级的抢占式调度策略,对同等优先级的任务执行时间片轮询调度:

“固定优先级” 是指调度器不会永久更改任务的优先级, 尽管它可能会因优先级继承而暂时提高任务的优先级。
“抢占式调度” 是指调度器始终运行优先级最高且可运行的 RTOS 任务, 无论任务何时能够运行。例如, 如果中断服务程序 (ISR) 更改了优先级最高且可运行的任务, 调度器会停止当前正在运行的低优先级任务 并启动高优先级任务——即使这发生在同一个时间片内 。此时,据说高优先级任务 “抢占”了低优先级任务。
“轮询调度” 是指具有相同优先级的任务轮流进入运行状态。
“时间片” 是指调度器会在每个 tick 中断上在同等优先级任务之间进行切换, tick 中断之间的时间构成一个时间片。tick 中断是 RTOS 用来衡量时间的周期性中断。

使用优先排序的抢占式调度器,避免任务饥饿
总是运行优先级最高且可运行的任务的后果是, 永远不会进入“阻塞”或 “挂起”状态的高优先级任务会让所有任意执行时长的低优先级任务永久饥饿 。这就是为什么通常最好创建事件驱动型任务的原因之一 。例如,如果一个高优先级任务正在等待一个事件, 那么它就不应处于该事件的循环(轮询)中,因为如果处于轮询中,它会一直运行,永远不进入“阻塞”或“挂起”状态。 反之,该任务应进入“阻塞” 状态来等待事件。可以使用众多 FreeRTOS 任务间通信和同步原语之一将事件发送给任务。接收到 事件后, 优先级更高的任务会自动解除“阻塞”状态。高优先级任务处于“阻塞”状态时, 低优先级任务会运行。

配置 RTOS 调度策略
以下 FreeRTOSConfig.h 设置更改了默认调度 行为:

configUSE_PREEMPTION
如果 configUSE_PREEMPTION 设置为 0,则关闭“抢占”, 只有当运行状态的任务进入“阻塞”或“挂起”状态, 或运行状态任务调用 taskYIELD(), 或中断服务程序 (ISR) 手动请求上下文切换时,才会发生上下文切换。

configUSE_TIME_SLICING
如果 configUSE_TIME_SLICING 设置为 0,则表示时间切片已关闭, 因此调度器不会在每个 tick 中断上在同等优先级的任务之间切换 。

FreeRTOS AMP 调度策略
使用 FreeRTOS 的非对称多处理 (AMP) 是指多核设备的每个核心都单独运行自己的 FreeRTOS 实例。这些 核心并不都需要具有相同架构, 但如果 FreeRTOS 实例之间需要进行通信,则需要共享一些内存。

每个核心都会运行自己的 FreeRTOS 实例, 因此任何给定核心上的调度算法与上文的单核系统调度算法完全相同 。您可以使用流缓冲区或消息缓冲区作为核间通信原语, 这样一来,一个核心上的任务可以进入“阻塞”状态, 以等待另一个核心发来的数据或事件。

FreeRTOS SMP 调度策略
使用 FreeRTOS 的对称多处理 (SMP) 是指 一个 FreeRTOS 实例可以跨多个处理器核心调度 RTOS 任务。由于 只有一个 FreeRTOS 实例在运行,一次只能使用 FreeRTOS 的一个端口, 因此每个核心必须具有相同的处理器架构并共用 相同的内存空间。

FreeRTOS SMP 调度策略使用与单核调度策略相同的算法, 但与单核和 AMP 场景不同的是, SMP 在任何给定时间都会导致多个任务处于运行状态 (每个核心上都有一个运行状态的任务)。这意味着, 只有缺乏可运行的高优先级任务时,才会运行低优先级任务的假设不再成立 。要想了解其中的原因,请考虑一下, 若起初只有一个高优先级任务 和两个中等优先级任务处于 “就绪”状态,SMP 调度器会如何选择在双核微控制器上运行的任务。调度器需要选择两个任务,每个核心对应一个任务。 首先,高优先级任务是指可运行的最高优先级任务, 因此会选择将它用于第一个核心。 这样就剩下了两个中等优先级的任务 作为可运行的最高优先级任务,因此会将它们用于第二个核心 。结果是高优先级和中等优先级的任务同时运行。

配置 SMP RTOS 调度策略
以下配置选项有助于移动下述代码:将为单核或 AMP RTOS 配置编写的代码移动到 SMP RTOS 配置中, 且这些代码依赖于该假设——如果有一个可运行的高优先级任务,那么低优先级任务不会运行。

configRUN_MULTIPLE_PRIORITIES
如果在下述文件中将 configRUN_MULTIPLE_PRIORITIES 设置为 0: FreeRTOSConfig.h,则调度器只会同时运行 具有相同优先级的多个任务。这可能会修复基于“一次只运行一个任务”这一假设编写的代码, 但这就无法享受到 SMP 配置带来的一些好处。

configUSE_CORE_AFFINITY
如果在 中将 FreeRTOSConfig.hconfigUSE_CORE_AFFINITY 设置为 1, 则 vTaskCoreAffinitySet() API 函数可用于定义某个任务可以在哪些核心上运行 以及不可以在哪些核心上运行。使用该方法,应用程序编写者可以防止 同时执行假设了自身执行顺序的两个任务 。

FreeRTOS 内核开发者文档:https://www.freertos.org/zh-cn-cmn-s/features.html

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

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

相关文章

51单片机IIC时序详细分析并驱动EEPROM存储方案应用------day9

51单片机IIC驱动EEPROM存储方案应用------day9 1.常见存储器件: 铁电, E2PROM, FLASH。 共同特点: 掉电后数据不丢失 各自特点: 铁电: 理论上可以无限次擦写, 操作简单, 但是容量小。…

进销存管理系统

技术:Java等摘要:进销存管理系统是为了实现企业仓库商品管理的系统化、规范化和自动化,从而提高企业管理效率而设计开发的管理信息系统。它完全取代了过去一直用人工管理的工作方式,避免了由于管理人员手工操作上的疏忽以及管理质…

【Linux】基本系统维护命令

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享C/C相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…

P6专题:P6模块/组件简要介绍(P6,Professional,API,TeamMember,WebService)

目录 一 引言 二 P6组件 P6 P6 Professional Team Member PC Team Member App Integration API WebService 一 引言 Oracle Primavera P6 EPPM 是基于“角色”设计的企业级项目管理专业软件,包含了如下几个组件/模块,解决不同维度的问题&#x…

linux入门---shell感性认识

命令行解释器 我们目前学了很多的指令,并且这些指令在磁盘上都是以文件的形式存在的: 通过file可以查看这些文件的信息,我们发现这些文件都含有executable这个单词,那么executable的意思就是这个文件在x86-64平台下是可以执行的…

【巨人的肩膀】JAVA面试总结(五)

1、💪 目录1、💪1.1、什么是Spring框架1.2、Spring、SpringMVC、SpringBoot三者关系1.3、谈谈对于Spring IoC 和 DI 的理解1.4、什么是依赖注入?可以通过多少种方式完成依赖注入1.5、什么是Spring Bean1.6、将一个类声明为Bean的注解有哪些1.…

PMP是什么意思?适合哪些人学呢?

PMP简而言之,就是提高项目管理理论基础和实践能力的考试。 官方一点的说明呢,就是:PMP证书全称为Project Management Professional,也叫项目管理专业人士资格认证。 PMP证书由美国项目管理协会(PMI)发起,是严格评估项…

Docker镜像的内部机制

Docker镜像的内部机制 镜像就是一个打包文件,里面包含了应用程序还有它运行所依赖的环境,例如文件系统、环境变量、配置参数等等。 环境变量、配置参数这些东西还是比较简单的,随便用一个 manifest 清单就可以管理,真正麻烦的是文…

【VC 7/8】vCenter Server 基于文件的备份和还原Ⅱ——使用 FTP 协议备份 VC(VAMI 英文)

目录2. 备份 vCenter Server2.1 使用 FTP 协议备份 VC(1)登录 vCenter Server 管理界面(2)进入Backup页面(3)配置 Backup Schedule(4)开始备份(5)备份成功&am…

信息安全与数学基础-笔记-④二次同余方程

知识目录二次同余方程的解欧拉判别式Legendre (勒让德符号)二次同余方程的解 什么是二次同余方程的解 注意这里二次同余方程和一次同余方程是不一样的 在x2x^2x2 三 a (mod m) 方程中举例 ↓ 解即剩余类,因为是模m,所以我们在 [ 0, m-1 ]中逐个代入看是…

HTML DOM

通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。HTML DOM (文档对象模型)当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 定义了用于 HTML 的一系列标准的对象,以及访问和处…

Compaction的原理与Hbase Compaction实现

HBase中的用户数据在LSM树体系架构中最终会形成一个一个小的HFile文件。我们知道,HFile小文件如果数量太多会导致读取低效。为了提高读取效率,LSM树体系架构设计了一个非常重要的模块——Compaction。Compaction核心功能是将小文件合并成大文件&#xff…

现代C++教程 笔记

写在前面 记录一下《现代C教程》中的要点。 现代C是指C11之后的语法特性,如无特别说明,下面的语法特性均是C11后才可使用。 一、语言可用性的强化 1. 常量 1.1 nullptr 作用: 代替NULL赋空指针; 使用: char *a …

进制的转换:

任意进制转换成十进制:十进制数位置上数*当前进制的位权二进制与八进制、十六进制之间的转换:3个二进制一个8进制4个二进制一个16进制各种进制的书写方式:十进制转换任意进制,分为整数部分和小数部分:整数部分(除基取余法&#xf…

SpringCloud的五大组件功能

SpringCloud的五大组件 EurekaRibbonHystrixZuulConfig 一、Eureka 作用是实现服务治理,即服务注册与发现。 Eureka服务器相当于一个中介,负责管理、记录服务提供者的信息。服务调用者不需要自己寻找服务 ,而是把需求告诉Eureka &#x…

IronWebScraper 2023.2.2 Crack

关于 .NET 的 IronWebScraper 用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 是一个 C# 网络抓取库,它允许开发人员模拟和自动化人类浏览行为,以从 Web 应用程序中提取内容、文件和图像作为本机 .NET 对象。Iron…

基于Flink SQL CDC Mysql to Mysql数据同步

基于Flink SQL CDC Mysql to Mysql数据同步 Flink CDC有两种方式同步数据库: 一种是通过FlinkSQL直接输入两表数据库映射进行数据同步,缺点是只能单表进行同步;一种是通过DataStream开发一个maven项目,打成jar包上传到服务器运行…

考研第一天,汤家凤基础班,连续与极限复习笔记

函数连续极限性质保号性证明极值点:夹逼准则二项式展开根号下,大于一,小于一的讨论直接放缩求和分子分母齐次,且分母大一次,用积分单调有界存在极限几个重要的切线放缩证明有界,然后放缩求单调证明有界&…

智慧高校数字化校园数据中心建设方案

本资料来源网络,知识分享,仅供个人学习,请勿商用。完整资料阅览见文末,部分资料内容: 一、 云数据中心建设规划云计算平台逻辑架构图 云设施即服务(IaaS,Cloud Infrastructure as a Service):系…

信息系统项目管理师——信息化和信息系统

信息的特征(掌握) 1、客观性 2、普遍性 3、无限性 4、动态性:信息是随着时间的变化而变化的。 5、相对性 6、依附性: 1)信息是客观世界的反映,任何信息必然由客观事物所产生,不存在无源的信息。…