STM32Cube-FreeRTOS任务管理工具函数-笔记
STM32Cube-FreeRTOS任务管理工具函数-笔记
- 一、获取任务句柄的函数
- 1. 创建任务并获取句柄
- 2. 获取当前任务句柄
- 3. 获取空闲任务句柄
- 4. 根据任务名称获取句柄
- 二、单个任务操作相关函数
- 1. 程序在运行时可以获取或改变一个任务的优先级
- 3. 获取任务信息
- 4. 获取任务信息
- 5. 获取任务名称
- 6. 获取堆栈高水位值
- 7. 获取任务状态
- 三、核信息统计相关的函数
- 1. 获取系统中任务总数
- 2. 获取任务列表字符串
- 获取系统任务状态数组
- 获取任务运行时间统计
- 调度器当前状态
一、获取任务句柄的函数
1. 创建任务并获取句柄
osThreadNew() 创建任务时返回类型为 osThreadId_t。
实际上,osThreadId_t 是对 FreeRTOS 的 TaskHandle_t 类型的封装。
底层调用 xTaskCreateStatic() 或 xTaskCreate(),返回值为 TaskHandle_t。
当我们在FreeRTOS要调用osThreadNew来创建任务的时候,它会返回一个osThreadId_t这个类型的变量作为任务句柄。
os开头的类型实际上是被包装过的一个类型,这个类型是被定义在这个文件里面,它不是一个 FreeRTOS自带的这么一种类型。
实际上osThreadNew它的核心是调用了xTaskCreateStatic或者是xTaskCreate。Create state它也有一个返回的类型。
TaskHandle_t这个类型是FreeRTOS定义的一种类型,它跟我们刚才这个osThreadId_t是等价的。其实这个东西它就叫做任务的句柄。
在创建任务时就获得了一个返回的任务句柄变量。那么这个变量就可以作为FreeRTOS任务操作函数的任务句柄输入参数。除了在任务创建时获取到任务的句柄,在FreeRTOS中还有3个用于获取任务句柄的函数。
由于右侧的函数列表太多了,所以outline试图被禁用了。
解决函数较多,让其他函数显示出来的设置方法。
2. 获取当前任务句柄
获取当前任务的句柄:xTaskGetCurrentTaskHandle()
返回值的方式获取到一个任务句柄。
可以看到在这个函数之上是有两个条件。必须在我们的STM32CubeMX可视化界面中将(INCLUDE_xTaskGetCurrentTaskHandle)这个选项设置为1,这个函数才可以被参与编译。否则这个函数将会被裁剪掉,以减少我们编译出来的文件的大小。
3. 获取空闲任务句柄
获取空闲任务的句柄:xTaskGetIdleTaskHandle
可以发现这里有灰色的底,这个函数它在STM32CubeMX里是不能设置的。如果你需要使用这个函数,可以将(INCLUDE_xTaskGetIdleTaskHandle)这个变量底范围1,那这里就可以参与编译。
4. 根据任务名称获取句柄
获取任务句柄的函数:xTaskGetHandle(const char *pcNameToQuery)
函数它需要传入的参数是任务名称的字符串。这函数运行的时间比较长,不建议大量使用。如果两个任务具有相同的任务名称,那函数返回的结果是不确定的。
可以将(INCLUDE_xTaskGetHandle)这个变量底范围1,那这里就可以参与编译。
二、单个任务操作相关函数
1. 程序在运行时可以获取或改变一个任务的优先级
函数:uxTaskPriorityGet(TaskHandle_t xTask)
功能:获取指定任务的当前优先级。
1.1. uxTaskPriorityGetFromISR,是上一个函数的中断服务程序版本
3. 获取任务信息
函数: vTaskGetInfo()
使用这两个函数都需要在STM32CubeMX中确保开启了(INCLUDE_uxTaskPriorityGet)这个选项。
4. 获取任务信息
函数: vTaskGetInfo()
4.1. 函数作用
vTaskGetInfo()
是 FreeRTOS 中用于获取指定任务详细信息的调试函数。它可以获取任务的以下信息:
- 任务状态(如运行态、就绪态、阻塞态等)
- 任务优先级
- 任务名称
- 堆栈使用情况(可选)
- 运行时间统计(需配置宏)
- 任务句柄和编号
4.2. 函数原型
void vTaskGetInfo(TaskHandle_t xTask, // 要查询的任务句柄TaskStatus_t *pxTaskStatus, // 保存任务信息的结构体指针BaseType_t xGetFreeStackSpace, // 是否计算堆栈最小剩余空间eTaskState eState // 是否获取任务当前状态
);
5. 获取任务名称
函数:pcTaskGetName(TaskHandle_t xTask)
功能:返回的是一个字符型的指针。它传入的参数是一个需要被查询的任务句柄。
6. 获取堆栈高水位值
函数:uxTaskGetStackHighWaterMark(TaskHandle_t xTask)
获取任务的高水位值的函数。这个高水位值实际上就是任务的占空间最少,可用的剩余空间大小单位是字,这个值越小表示任务的占空间越容易溢出。当发现获取到的这个值偏小的时候,就要考虑扩大这个任务的占空间。
7. 获取任务状态
函数:eTaskGetState(TaskHandle_t xTask)
返回任务的当前状态。以e函开头的表示,它的返回值是一个枚举型。
三、核信息统计相关的函数
1. 获取系统中任务总数
函数:uxTaskGetNumberOfTasks()
功能:返回任务当前管理的任务的总数,包括就绪和阻塞的挂起的任务,也包含虽然删除了但是没有在空闲任务里释放的。
2. 获取任务列表字符串
函数:vTaskList(char *pcWriteBuffer)
功能:返回内核中所有任务的字符串列表信息,包含每个任务的名称、状态、优先级、高水位值、任务编号。使用这个函数时需要传入一个足够大的字符数组,FreeRTOS不会检查这个传入的数组的大小。
注意事项:vTaskList代码中用到了sprint f函数,会使编译后的应用大小明显增大。所以说这个函数一般只在调试时使用,不要在发布版本里使用。
获取系统任务状态数组
函数:uxTaskGetSystemState()
参数第一个是一个数组的指针,它是一个结构体数组需要预先的分配,数组的大小必须是大于等于FreeRTOS内的任务,下一个参数是指的第一个参数中的数组的成员个数。第三个参数用于返回FreeRTOS运行后的总时间。
获取任务运行时间统计
函数:vTaskGetRunTimeStats(char *pcWriteBuffer)
功能:输出任务运行时间和 CPU 占比。
函数也需要传入一个字符串,会以文字表格的形式返回出每个任务的运行时间,包括绝对时间和占用CPU的百分比。需要注意的是,这个函数它在运行时会禁用掉所有中断,所以不要在程序正常运行时使用这个函数,应该只在调试阶段使用。
调度器当前状态
函数:xTaskGetSchedulerState()
功能:返回调度器当前状态。
返回值:
taskSCHEDULER_NOT_STARTED(未启动)
taskSCHEDULER_RUNNING(运行中)
taskSCHEDULER_SUSPENDED(被挂起)
相关文章:
STM32Cube-FreeRTOS任务管理工具函数-笔记
STM32Cube-FreeRTOS任务管理工具函数-笔记 一、获取任务句柄的函数1. 创建任务并获取句柄2. 获取当前任务句柄3. 获取空闲任务句柄4. 根据任务名称获取句柄 二、单个任务操作相关函数1. 程序在运行时可以获取或改变一个任务的优先级3. 获取任务信息4. 获取任务信息5. 获取任务名…...
【第三十四周】多模态大模型调研
多模态大模型调研 摘要Abstract引言多模态技术的主要方向视觉-语言大模型(Vision-Language Large Models, VLLMs)语音-语言大模型(Speech-Language Large Models, SLLMs)音乐 - 语言大模型(Music-Language Large Model…...
【2025最新】Baichuan-M1-instruct部署教程
首先机器至少要A100、4090、3090 这里选AutoDL的4090D,运行至少要20G显存。这里镜像选基础镜像11.8【更新!!!!!!!!!24G带不动!显存不够】 有时候…...
Unity与Unreal Engine(UE)的深度解析及高级用法
以下是Unity与Unreal Engine(UE)的深度解析及高级用法对比,结合技术特性、行业应用与未来发展进行综合阐述: 一、核心差异与适用场景对比 1. 技术架构与编程模式 Unity 语言与脚本:主要使用C#,语法简洁且易于学习,适合快速原型开发和中小型项目。支持可视化脚本工具(如…...
网络:TCP三次握手、四次挥手
目录 深刻理解三次握手 深刻理解四次挥手 深刻理解三次握手 三次握手时,如果最后一个ACK包,服务器没有收到,此时: 客户端:认为已经建立链接 服务器:认为没有建立链接,还在超时等待。 而此时…...
spdlog自定义formatter
用了之后发现,spdlog的默认日志记录格式为: [2014-10-31 23:46:59.678] [my_loggername] [info] Some message 但是这个格式不是我想要的,怎么办,这个也简单,上面的内容也就是几个标签的组合而已,spdlog自定…...
Spring AI 实战:第四章、Spring AI多模态之看图说话
引言:从"码农"到"多媒体魔术师" “曾经,我们的代码核心擅长处理文本,就像餐厅里只会做炒饭的厨师。现在有了Spring AI多模态支持,我们突然拥有满汉全席的烹饪技巧!” 作为一名常年与String打交道的开发者,当第一次看到Spring AI可以同时处理图片、音…...
ES6入门---第二单元 模块五:模块化
js不支持模块化 注意: 需要放到服务器环境 1、如何定义模块? export 东西 例:1.js文件中 console.log(1模块加载了);//显示是否加载了 export const a 12; export const b 5; export let c 101; const a12; const b5; const c101;ex…...
Python 函数装饰器和闭包(变量作用域规则)
本章内容: Python 如何计算装饰器句法 Python 如何判断变量是不是局部的 闭包存在的原因和工作原理 nonlocal 能解决什么问题 掌握这些基础知识后,我们可以进一步探讨装饰器: 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化装饰器…...
什么是constexpr?
什么是constexpr? 简单来说,constexpr就是告诉编译器:“我这个变量或函数的值可以在编译时算出来,请帮我提前算好,运行时直接用结果,不用再算了。” • **传统const**只表示变量不可修改,但不…...
如何在 PowerEdge 服务器上设置 NIC 分组
以下文章提供了有关 Windows、VMware 和 Linux 中的 NIC 分组的信息。 什么是网络适配器分组?设置 NIC 分组 Windows设置 NIC 分组 VMware设置 NIC 分组 Linux 什么是网络适配器分组(绑定)? 网络适配器分组是一个术语࿰…...
ES6入门---第三单元 模块四:Set和WeakSet
set数据结构: 类似数组,但是里面不能有重复值,如果有,只显示一个 set用法: let setArr new Set([a,b]); setArr.add(a); 往setArr里面添加一项 let setArr new Set().add(a).add(b).add(c); setArr.delete(b); 删除一项 setArr.ha…...
架构进阶:75页架构规划方法课件 【附全文阅读】
本文概述了一个关于架构规划方法的目录及其目的,重点介绍了基于联邦企业架构(FEAF)的架构建模方法,并提及了不同层面的架构建模方法以及培训的目的。以下是对该内容的简洁总结: **架构规划方法目录及其目的** 本文旨在…...
前端面经-VUE3篇(三)--vue Router(二)导航守卫、路由元信息、路由懒加载、动态路由
一、导航守卫 vue Router 中的 导航守卫(Navigation Guards) 是一个非常重要的功能,用于在路由切换过程中,拦截、控制、检查或延迟页面跳转。 你可以理解为: 🔐 “进门前的保安”,控制哪些页面…...
RTX-3090 Qwen3-8B Dify RAG环境搭建
RTX-3090 Qwen3-8B Dify RAG环境搭建 一、环境配置二、操作步骤1、创建容器2、下载`Qwen3-8B`和embedding模型3、安装`transformers`4、安装`vllm`5、安装`flash-attention`6、启动兼容OpenAI API的服务1、方案一:启动`vllm`服务【不支持多任务】2、方案二:Flask和PyTorch实现的…...
Circular Plot系列(三):【视频教程】复现NCS图表之高大上的单细胞UMAP环形图
高端复杂的UMAP复现: 这又是一个高大上且炫酷的单细胞UMAP图,展示的信息很多,有大类细胞和亚群,以及marker基因和cell count信息,还可以增加其他的分组信息等等。没错,看这个图就是circlize一层层画的。我们…...
MCP智能体多Agent协作系统设计(Multi-Agent Cooperation)
目录 🚀 MCP智能体多Agent协作系统设计(Multi-Agent Cooperation) 🌟 为什么需要多Agent协作? 🧠 多Agent协作系统架构设计 🛠️ 1. 构建基础智能体基类(Agent Base)…...
栈Stack
一 栈:先进后出 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 Stack<Integer> sta…...
HTML01:HTML基本结构
HTML基本结构 <html> <head><meta charset"UTF-8"><title>我的第一个网页</title> </head> <body>我的第一个网页 </body> </html><body、</body等成对的标签,分别叫开发标签和闭合标签单独…...
QT聊天项目DAY07
1.Win配置和使用GRPC 1.1 克隆GRPC库 克隆GRPC git clone -b v1.34.0 https://gitee.com/mirrors/grpc-framework.git 查看Git有没有安装 没有安装 1.1.1 安装Git https://git-scm.com/ 一路next 添加Git的路径到系统环境变量下 我这次没用管理员权限,并且也没…...
2025年PMP 学习三
4.2制定项目管理计划 4. 项目管理计划 - 内容(输出) 项目目标的制定原因: 3个基准(范围基准、进度基准、成本基准) 子管理计划:范围、需求、进度、成本、质量、资源、沟通、风险、采购等管理计划…...
软考-软件设计师中级备考 10、文件管理、设备管理
一、 文件管理 1、文件目录 文件控制块(FCB):是操作系统为管理文件而设置的数据结构,包含了文件的基本信息(如文件名、文件大小、文件类型等)、存取控制信息(如文件所有者的权限、其他用户的权…...
Linux环境下的进程创建-fork函数的使用, 进程退出exit和_exit的区别,以及进程等待waitpid和status数据的提取方法
目录 一、进程创建 1.fork函数 1)进程调用fork函数是如何创建子进程的 2)代码示范 2.写时拷贝 二、进程退出 1.退出码 1)什么是退出码? 2)为什么要有退出码? 3)退出码是怎么做到的? …...
【数据结构与算法】常见排序算法详解(C++实现)
目录 一、排序的基本概念 二、插入排序 2.1 直接插入排序 2.2 折半插入排序 2.3 希尔排序 三、交换排序 3.1 冒泡排序 3.2 快速排序 四、选择排序 4.1 简单选择排序 4.2 堆排序 五、归并排序 六、基数排序 七、计数排序 结语 一、排序的基本概念 排序 就是重新…...
STM32GPIO输入实战-按键key模板及移植
STM32GPIO输入实战-按键key模板及移植 一,按键模板展示二,按键模板逻辑1,准备工作:头文件与全局变量2,读取硬件状态:key_read_raw()3,核心处理:key_process_simple() 的四行代码 三,…...
LeetCode 1128.等价多米诺骨牌对的数量:计数
【LetMeFly】1128.等价多米诺骨牌对的数量:计数 力扣题目链接:https://leetcode.cn/problems/number-of-equivalent-domino-pairs/ 给你一组多米诺骨牌 dominoes 。 形式上,dominoes[i] [a, b] 与 dominoes[j] [c, d] 等价 当且仅当 (a …...
Spring MVC设计与实现
DispatcherServlet的初始化与请求处理流程 初始化阶段 Servlet 生命周期触发:当 Web 容器(如 Tomcat)启动时,根据注解/配置,DispatcherServlet 的 init() 方法被调用。 初始化 WebApplicationContext 根 WebApplicat…...
日语学习-日语知识点小记-进阶-JLPT-N1阶段(1):语法单词
日语学习-日语知识点小记-进阶-JLPT-N1阶段(1):语法单词 1、前言(1)情况说明(2)工程师的信仰(3)高级语法N1语法和难点一、N1语法学习内容(高级语法ÿ…...
stm32week14
stm32学习 十.GPIO 2.基本结构 基本结构: F1与其它的的最大区别是上下拉电阻的位置 施密特触发器是一种整形电路,可以将非标准方波,整形成方波 图中MOS管的输出规则: 3.8中工作模式 ①输入浮空: 上下拉电阻均不工…...
WPF中Binding
绑定ViewModel中的数据 添加数据上下文 方法一:在XAML中添加 <Window.DataContext><local:MainWindowViewModel /> </Window.DataContext>方法二:在界面层的cs文件中添加 this.DataContext new MainWindowViewModel();绑定 publ…...
Google Agent space时代,浅谈Agent2Agent (A2A) 协议和挑战!
如果说去年Google Cloud大会大家还在数“AI”这个词被提了多少次,那么今年,绝对是“Agent”的主场!开发者主题演讲几乎被它“刷屏”,展区的许多 Demo 也都号称是 Agent 应用。 但我得诚实地说,大会现场关于 Agents 的 …...
爬虫的应用
在自然语言处理(NLP)领域,文本数据的预处理是至关重要的基础环节。它如同工匠雕琢璞玉前的打磨工作,直接影响后续模型分析与挖掘的效果。本文将基于 Python,以电商平台的差评和优质评价文本数据为例,详细展…...
力扣面试150题--相同的树
Day 41 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...
Java后端开发day40--异常File
(以下内容全部来自上述课程) 异常 异常:异常就是代表程序出现的问题 1. 异常的分类 1.1 Error 代表的是系统级别的错误(属于严重问题) 系统一旦出现问题,sun公司会把这些错误封装成Error对象。 Error…...
集成算法学习
集成算法通过组合多个弱学习器提升模型性能,以下是核心内容详解: 一、核心思想 - 组合优势:结合多个简单模型(如决策树),通过“少数服从多数”或“加权平均”等策略,降低方差、偏差或过拟合风险…...
工业认知智能:从数据分析到知识创造
工业认知智能:从数据分析到知识创造 引言 当前制造业面临的知识管理困境令人震惊:68%的工艺知识存储于老员工头脑中,30%的企业因知识传承断层导致质量事故。麦肯锡研究显示,应用认知智能技术的企业,其工艺创新速度提升3-5倍。本文将系统阐述工业认知智能的"感知-理…...
8.1 Python+Docker+企业微信集成实战:自动化报告生成与CI/CD部署全攻略
Python+Docker+企业微信集成实战:自动化报告生成与CI/CD部署全攻略 关键词:PDF报告生成, Word文档自动化, 企业微信集成, Docker容器化, CI/CD流水线 1. 多格式报告生成实战 通过扩展报告输出格式,满足不同用户的文档需求。我们使用Python生态的成熟库实现PDF/Word生成,并…...
25.5.4数据结构|哈夫曼树 学习笔记
知识点前言 一、搞清楚概念 ●权:___________ ●带权路径长度:__________ WPL所有的叶子结点的权值*路径长度之和 ●前缀编码:____________ 二、构造哈夫曼树 n个带权值的结点,构造哈夫曼树算法: 1、转化成n棵树组成的…...
统计学中的p值是什么?怎么使用?
李升伟 整理 在统计学中,p值(p-value)是帮助研究者判断假设检验结果是否具有统计显著性的重要指标。以下是关于p值的详细解释和使用方法: 1. p值的定义 p值表示在原假设(H0)为真的情况下,观察…...
22:一维码与二维码区别
一维码(条形码) 一维条码即指条码条和空的排列规则,常用的一维码的码制包括:EAN码、39码、交叉25码、UPC码、128码、93码,ISBN码,及Codabar(库德巴码)等。 条码是由一组规则排列的条…...
Java学习手册:SQL 优化技巧
一、SQL 查询优化 选择合适的索引列 :索引可以显著提高查询速度,但需要选择合适的列来创建索引。通常,对于频繁作为查询条件的列、连接操作的列以及排序或分组操作的列,应该考虑创建索引。例如,在一个订单表中…...
《Vue3学习手记8》
vue3中的一些API shallowRef ( ) 和shallowReactive ( ) shallowRef (浅层响应式) 1.作用:创建一个响应式数据,但只对顶层属性进行响应式处理。 2.用法: const originalref(...) const original2shallowRef(original) 3.特点:只跟踪引用值的变化,不关心…...
平衡二叉搜索树模拟实现1-------AVL树(插入,删除,查找)
本章目标 1.AVL树的概念 2.AVL树的模拟实现 1.AVL树的概念 1.AVL树是最先被发明的平衡二叉搜索树,AVL树是一颗空树或者具有以下的性质 它的左右子树都是AVL树,并且左右高度差不超过1,AVL树是一颗高度平衡二叉搜索树,通过高度差去控制平衡 2.为什么高度差是1? 当结点个数为8…...
运算放大器的主要技术指标
运放(运算放大器)是一种基础电子器件,具有输入阻抗高、开环放大倍数大、输入端电流小、同相端与反相端电压几乎相等等特点。在选型时,需要考虑技术指标如输入失调电压、输入失调电压漂移、输入失调电流、共模抑制比、压摆率、建立…...
51单片机入门教程——每个音符对应的重装载值
前言 本教程基于B站江协科技课程进行个人学习整理,专为拥有C语言基础的零基础入门51单片机新手设计。既帮助解决因时间差导致的设备迭代调试难题,也助力新手快速掌握51单片机核心知识,实现从C语言理论到单片机实践应用的高效过渡 。...
新一代智能座舱娱乐系统软件架构设计文档
一 文档概述 本文档描述了基于Android系统与多模态大模型融合的新一代智能座舱娱乐系统的软件架构设计。该系统将通过深度学习的个性化适配、多模态感知融合和持续自进化能力,重新定义人车交互体验。 二 整体架构设计 2.1 分层架构视图 系统采用五层垂直架构与三…...
深度优先搜索(DFS)与广度优先搜索(BFS):图与树遍历的两大利器
深度优先搜索(DFS)与广度优先搜索(BFS):图与树遍历的两大利器 在数据结构与算法的世界中,深度优先搜索(DFS)和广度优先搜索(BFS)是两种非常经典的遍历算法。…...
比较 TensorFlow 和 PyTorch
TensorFlow和PyTorch是深度学习领域中两个非常流行的开源机器学习框架,下面为你详细介绍。 1. 历史与背景 TensorFlow:由Google开发和维护,于2015年开源。因其强大的生产能力和广泛的工具支持,在工业界得到了广泛应用。PyTorch&…...
jeecg查询指定时间
jeecg查询指定时间 ApiOperation(value"请假表-分页列表查询", notes"请假表-分页列表查询")GetMapping(value "/list")public Result<IPage<MlLeaveRequest>> queryPageList(MlLeaveRequest mlLeaveRequest,RequestParam(name&qu…...
无人机视觉:连接像素与现实世界 —— 像素与GPS坐标双向转换指南
在无人机航拍应用中,一个核心的需求是将图像上的某个点与现实世界中的地理位置精确对应起来。无论是目标跟踪、地图测绘还是农情监测,理解图像像素与其对应的经纬度(GPS坐标)之间的关系至关重要。本文将详细介绍如何实现单个像素坐…...