FreeRTOS 任务优先级

FreeRTOS 任务优先级

介绍

在 FreeRTOS 中,任务优先级是一种重要的调度机制,它决定了任务在系统中的执行顺序和调度方式。本文将深入探讨 FreeRTOS 任务优先级的概念、作用以及如何合理地设置任务优先级。

什么是任务优先级?

任务优先级是 FreeRTOS 中用于调度任务的一个重要属性。在 FreeRTOS 中,系统中的每个任务都有一个优先级,优先级越高的任务将优先被调度执行。任务优先级是一个非负整数,取值范围通常是 0 到 (configMAX_PRIORITIES - 1),其中 configMAX_PRIORITIES 是 FreeRTOS 配置文件中定义的最大优先级数量。

任务优先级的作用

任务优先级的设置直接影响了任务的调度顺序和执行顺序。具有较高优先级的任务将在具有较低优先级的任务之前被调度执行,这保证了系统中重要任务的及时响应和执行。

如何设置任务优先级?

设置任务优先级可以通过 xTaskCreate() 函数的参数来指定任务的优先级。通常情况下,优先级为数值 0 到 (configMAX_PRIORITIES - 1)。

xTaskCreate(taskFunction, "TaskName", stackSize, parameters, priority, &taskHandle);

其中,priority 参数用于设置任务的优先级。较高的数值表示较高的优先级。

《吃撑和饿死》 的问题

“饥饿” 或 “吃撑” 问题,是多任务系统中常见的一种情况。这种情况发生时,高优先级任务持续占用 CPU 资源,导致低优先级任务无法得到执行,甚至可能永远被阻塞或挂起。

饥饿问题通常由以下几个原因导致:

  1. 优先级反转:当一个低优先级任务持有一个高优先级任务所需的资源时,高优先级任务被阻塞,低优先级任务占用资源。这种情况下,即使高优先级任务可运行,它也无法执行。

  2. 忙等待:高优先级任务在循环中持续运行,而不释放 CPU 或让出时间片给其他任务。这会导致低优先级任务无法得到执行。

FreeRTOS 中用于任务调度的一些关键API

  1. 设置任务优先级:

    • 函数原型:void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority);
    • 作用:用于设置指定任务的优先级。
    • 参数:
      • xTask:要设置优先级的任务句柄。
      • uxNewPriority:新的任务优先级。
    • 示例:
      vTaskPrioritySet(taskHandle, 3);
      

    这将任务 taskHandle 的优先级设置为 3。

  2. 获取任务优先级:

    • 函数原型:UBaseType_t uxTaskPriorityGet(TaskHandle_t xTask);
    • 作用:用于获取指定任务的优先级。
    • 参数:xTask:要获取优先级的任务句柄。
    • 示例:
      UBaseType_t priority = uxTaskPriorityGet(taskHandle);
      

    这将获取任务 taskHandle 的优先级,并存储在 priority 变量中。

  3. 获取当前任务优先级:

    • 函数原型:UBaseType_t uxTaskPriorityGet(NULL);
    • 作用:用于获取当前任务的优先级。
    • 示例:
      UBaseType_t priority = uxTaskPriorityGet(NULL);
      

    这将获取当前任务的优先级,并存储在 priority 变量中。

  4. 任务让步:

    • 函数原型:void taskYIELD();void yield();
    • 作用:让出 CPU 时间片,使得调度器重新评估任务的优先级,并决定下一个要执行的任务。
    • 示例:
      taskYIELD();
      

    这将让出当前任务的执行,使得调度器有机会重新评估任务的优先级,然后选择下一个要执行的任务。

总结

任务优先级是 FreeRTOS 中任务调度的重要机制之一,它决定了任务的执行顺序和调度方式。合理设置任务的优先级可以有效地管理系统资源,确保系统的稳定性和实时性。程序需要根据应用的实际需求和系统特点,灵活设置任务的优先级,以提高系统的性能和可靠性。

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

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

相关文章

【mac】 配合鼠标放大缩小页面\通过ctrl或cmd键缩放页面

win转mac后,一直苦于页面的操作习惯,终于BBT这个工具可以通过添加滚轮手势来实现快捷键缩放页面 顶部配置触发选择“普通鼠标” 然后设置触发操作

滴滴基于 Ray 的 XGBoost 大规模分布式训练实践

背景介绍 作为机器学习模型的核心代表,XGBoost 在滴滴众多策略算法业务场景中发挥着至关重要的作用。因此,保障并持续提升 XGBoost 模型的离线训练及在线推理稳定性一直是机器学习平台的重点工作。同时,面对多样化的业务场景定制需求和数据规…

ubuntu设置右键打开terminator、code

前言: 这里介绍一种直接右键打开本地目录下的terminator和vscode的方法。 一:右键打开terminator 1.安装terminator sudo apt install terminator 2.安装nautilus-actions filemanager-actions sudo apt-get install nautilus-actions filemanager…

ES6 剩余函数

ES6 引入了剩余参数(Rest Parameters)的概念,允许函数接受不定数量的参数,这些参数会被捕获成一个数组。剩余参数的语法使用三个点 ... 后跟一个参数名。 以下是一个简单的例子: function sum(...numbers) {return n…

docker-compose Install influxdb1+influxdb2+telegraf

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下,以前(Windows 11) Typora 可以顺利较快地由 .md 导出 .pdf 文件,此功能当然非常实用与重要。 然而,有一次电脑因故重装了系统(刷机)…

如何获得ICP备案服务码?

服务码获取规则 域名备案需要ICP备案服务码,服务码需要购买服务器获得,阿里云的服务器获取服务码的规则如下。 * 不同类型的服务器可申请的ICP备案服务码数量不同,新增备案一个网站需使用一个ICP备案服务码,注销或取消接入后无法…

QT+VS实现Kmeans聚类算法

1、Kmeans的定义 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使…

访问服务器上的 Jupyter Notebook

文章目录 1、生成秘钥2、修改配置3、启动 Jupyter 安装和基本使用方法可见: https://blog.csdn.net/lovechris00/article/details/123458990 1、生成秘钥 jupyter notebook password输入秘钥后,将生成秘钥文件,进入文件,复制那一…

linux中配置文件目录为什么用etc来命名

在早期的 Unix 系统中,/etc 目录的名称确实来源于单词 “etcetera” 的缩写,最初意味着 “其他”,用来存放杂项或者不属于其他特定目录的文件。然而,随着时间的推移,/etc 目录的用途逐渐演变并专门化。 在现代的 Linux…

Android App开发-简单控件(1)——文本显示

本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识,完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍…

架构篇27:如何设计计算高可用架构?

文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…

《开始使用PyQT》 第01章 PyQT入门 04 创建第一个桌面应用

04 创建第一个桌面应用 《开始使用PyQT》 第01章 PyQT入门 04 创建第一个桌面应用 A GUI application generally consists of a main window and possibly one or more dialog boxes. The main window is where the user will spend most of their time when using your appl…

【Docker】nacos集群搭建Nginx负载均衡

目录 一、mysql安装与基操 1.1 数据准备 1.2 创建mysql与数据表 二、Nacos集群部署 2.1 创建nacos及配置 2.2 创建Nginx容器 一、mysql安装与基操 1.1 数据准备 拉取mysql docker pull mysql:5.7(版本) 定义挂载目录 mkdir -p /mysql/{conf,data,script} 配置my.c…

第十四届蓝桥杯C组题目 三国游戏

4965. 三国游戏 - AcWing题库 小蓝正在玩一款游戏。 游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 00)。 游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分…

JavaWeb:商品管理系统(Vue版)

文章目录 1、功能介绍2、技术栈3、环境准备3.1、数据库准备3.2、在新建web项目中导入依赖3.3、编写Mybatis文件3.4、编写pojo类3.5、编写Mybatis工具类3.6、导入前端素材(element-ui & vue.js & axios.js)3.7、前端页面 4、功能实现4.1、查询所有…

2024 前端趋势预测:React 不会被取代,AI 崛起,追求全栈宇宙

对于前端来说,2023 是非同寻常的一年。我们见证了争相抢占甚至是发明服务器端渲染(SSR)市场的热潮、AI 的不断进步、Web 渲染器和 JS 引擎的寒武纪大爆发、一大批有力的竞争者试图摧毁巨头的统治地位…… 在开始预测未来一年发展趋势之前&am…

(4)Elastix图像配准:3D图像

文章目录 前言1、项目实战2、参数文件2.1、parameter_file_rigid_3D.txt2.2、parameter_file_affine_3D.txt2.3、parameter_file_bspline_3D.txt前言 (1)Elastix图像配准:原理 + 源码(详解) (2)Elastix图像配准:参数文件(配准精度的关键) 1、项目实战 将以下文件保…

深度学习:Softmax回归

在前面,我们介绍了线性回归模型的原理及实现。线性回归适合于预测连续值,而对于分类问题的离散值则束手无策。因此引出了本文所要介绍的softmax回归模型,该模型是针对多分类问题所提出的。下面我们将从softmax回归模型的原理开始介绍&#xf…

vscode远程服务器中文显示为数字乱码,终端无法输入中文

最开始以为是vscode设置问题,后来发现是服务器没有安装中文包 解决方案: ① 先安装locales,这个包在Debian/Ubuntu及其衍生发行版中用作区域设置,用于设置用户语言、所在地区以及对应的一些区域变量 sudo apt install locales ②…