FreeRTOS【6】线程优先级

1.开发背景

       基于上一篇指引,已经了解了线程的阻塞,这个篇章主要介绍线程优先级的影响

2.开发需求

        设计实验验证高优先级会抢占低优先级线程 CPU

3.开发环境

        window10 + MDK + STM32F429 + FreeRTOS10.3.1

4.实现步骤

        1)创建测试线程,其中线程 0 不阻塞,线程 1 定时阻塞。开始 2 个线程优先级都是1

/* 动态任务组 */
static void TaskList(void *pvParameters)
{int count = 0;int whichTask = atoi(pvParameters);for ( ; ; ){switch (whichTask){case 0:break;case 1:vTaskDelay(1000);Log_Debug("%s [%d] count = %d\r\n", __func__, whichTask, count++);break;default:vTaskDelay(1000);break;}}
}

        2)控制线程在 3000ms  后将线程 0 优先级设置为 2,再过 3000ms 将线程 0 优先级设置为 0,这里涉及到的接口有获取线程优先级的 uxTaskPriorityGet,设置优先级接口 vTaskPrioritySet

/* 串行延时任务 */
static void TaskCtrl(void *pvParameters)
{vTaskDelay(100);UBaseType_t taskPriority[TASK_LIST_SIZE] = {0};for (int i = 0; i < TASK_LIST_SIZE; i++){taskPriority[i] = uxTaskPriorityGet(p->taskList[i]);}Log_Debug("Priority[0] = %d, Priority[1] = %d\r\n", taskPriority[0], taskPriority[1]);vTaskDelay(3000);Log_Debug("设置测试线程0 优先级 = 2\r\n");vTaskPrioritySet(p->taskList[0], 2);vTaskDelay(3000);Log_Debug("设置测试线程0 优先级 = 0\r\n");vTaskPrioritySet(p->taskList[0], 0);for ( ; ; ){vTaskDelay(1000);}
}

        3)显示测试结果

        如图在第 0 秒,线程 0 和线程 1 具备相同的优先级,就算线程 0 不阻塞,系统也会定时切换到线程 1,在第 3 秒时提高的线程 0  的优先级,线程 1 无法继续运行,直至第 6 秒的时候降低了线程 0 的优先级后线程 1 才可以继续运行,符合设计预期。

5. 其他

        除了上述的优先级设置和查询接口,还有中断使用的 uxTaskPriorityGetFromISR,如何在中断中使用 FreeRTOS API 接口在前面的文章已经使用过了。

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

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

相关文章

详解绝对路径和相对路径的区别

绝对路径和相对路径是用于描述文件或目录在文件系统中位置的两种不同方式。 绝对路径&#xff08;Absolute Path&#xff09;是从文件系统的根目录开始的完整路径&#xff0c;可以唯一地确定一个文件或目录的位置。在不同的操作系统中&#xff0c;根目录的表示方式可能略有不同…

Google Ads谷歌广告账户被封停怎么办?

跨境出海业务少不了需要做Google Ads推广业务&#xff1b;其中让投手们闻风丧胆的消息就是帐户被暂停。当 Google 检测到任何违反其政策且可能损害用户在线体验的行为时&#xff0c;就会发生这种情况。那么如何在做广告推广的同时&#xff0c;保证账号不被封禁呢&#xff1f;看…

JSP+SQL学生成绩管理系统

Java版本&#xff1a;1.8 数据库&#xff1a;MySQL 框架&#xff1a;Spring Spring MVC MyBatis 服务器&#xff1a;Tomcat 前端解析框架&#xff1a;Thymeleaf 开发工具&#xff1a;Idea 2017 版本管理工具&#xff1a;Maven 版本控制工具&#xff1a;GitHub 经过对系统的需…

【力扣】移动零

class Solution:def moveZeroes(self, nums: List[int]) -> None:nlen(nums)for i in range(n):if nums[i]0:ji1while j<n-1:if nums[j]!0:nums[i]nums[j]nums[j]0breakj1复杂度太高了&#xff0c;O(n*n)了 class Solution:def moveZeroes(self, nums: List[int]) ->…

解决kali Linux安装后如何将语言修改为中文

开启虚拟机 用root用户进入终端 进入终端执行dpkg-reconfigure locales命令 选择en_US.UTF-8 UTF-8选项&#xff0c;按空格键将其取消。 选择zh_CN.UTF-8 UTP-8&#xff0c;按空格选择&#xff0c;按tab键选择ok。 选择zh_CN.UTF-8字符编码&#xff0c;按tab键选择ok&#xff0…

[NOIP2011 普及组] 瑞士轮

[NOIP2011 普及组] 瑞士轮 题目背景 在双人对决的竞技性比赛&#xff0c;如乒乓球、羽毛球、国际象棋中&#xff0c;最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少&#xff0c;每场都紧张刺激&#xff0c;但偶然性较高。后者的特点是较为公平&#xff0c;偶然性较低…

查看Linux服务器的硬盘占用情况

查看Linux服务器的硬盘占用情况 一、查看各分区的使用情况和磁盘挂载1、查看磁盘分区使用和磁盘挂载2、结果解释&#xff08;1&#xff09;列名解释&#xff08;2&#xff09;各系统解释 二、查看一个目录及其所有子目录中文件的总占用大小1、查看指定目录的总大小2、列出目录下…

Unity与Andriod的交互

Unity与安卓的信息交互 这次分享的不同于传统的方式AndroidJavaClass("com.unity3d.player.UnityPlayer") 如果是新手的话&#xff0c;请看 交互新手教程 这里讲的是在Unity中调用java代码&#xff0c;或者在unity中传参到java中&#xff0c;在Java代码中运行。 以下…

VUE之旅—day2

文章目录 Vue生命周期和生命周期的四个阶段created应用—新闻列表渲染mounted应用—进入页面搜索框就获得焦点账单统计&#xff08;Echarts可视化图表渲染&#xff09; Vue生命周期和生命周期的四个阶段 思考&#xff1a; 什么时候可以发送初始化渲染请求&#xff1f;&#xff…

【董晓算法】动态规划之背包DP问题(2024.5.11)

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【董晓算法】动态规划之线性DP问题-CSDN博客 01背包 步骤&#xff1a; 分析容量j与w[i]的关系&#xff0c;然后分析是否…

一种请求头引起的跨域问题记录(statusCode = 400/CORS)

问题表象 问题描述 当我们需要在接口的headers中添加一个自定义的变量的时候&#xff0c;前端的处理是直接在拦截器或者是接口配置的地方直接进行写&#xff0c;比如下面的这段比较基础的写法&#xff1a; $http({method: "post",url:constants.backend.SERVER_LOGIN…

fl studio试用版文件保存无法打开??一个方法教你免费打开!

前言 当下&#xff0c;各款编曲软件五花八门&#xff0c;而这其中最有声誉的必为FL Studio莫属 这个软件呢国人习惯叫他水果&#xff0c;拥有强大的录音、编曲、混音等功能&#xff0c;所以广受音乐圈欢迎。如今&#xff0c;大部分水果一旦有编曲所需&#xff0c;一般都要使用…