新闻详情

新闻详情

首页 / 资讯中心 / 详情

FreeRtos——16、查询freeRTOS任务的状态

发布时间:2026/9/5 23:13:04来源:尧图网络
FreeRtos——16、查询freeRTOS任务的状态
FreeRTOS 中如何查询任务的运行状态比如运行、阻塞、挂起等这是调试和监控系统运行状态的重要能力。FreeRTOS 提供了多种方式查询任务状态既可以获取单个任务的状态也能批量查看所有任务的状态信息。下面我会详细讲解具体实现方法包括核心 API、代码示例和状态含义。一、任务状态的核心定义首先明确 FreeRTOS 中任务的几种核心状态宏定义在task.h中状态宏缩写含义eRunningR任务正在运行仅单核 CPU同一时间只有 1 个eReadyR任务就绪等待调度器调度eBlockedB任务被阻塞延时、等待信号量 / 队列等eSuspendedS任务被挂起调用vTaskSuspend()eDeletedD任务已删除但未清理资源二、查询任务状态的两种方法方法 1查询单个任务的状态xTaskGetTaskState适用于针对性查看某个任务的状态核心 APIeTaskState xTaskGetTaskState( TaskHandle_t xTask );参数xTask- 任务句柄传 NULL 表示当前任务返回值eTaskState枚举类型代表任务状态完整示例代码#include FreeRTOS.h #include task.h #include stdio.h // 定义任务句柄 TaskHandle_t xTestTaskHandle NULL; // 测试任务 void vTestTask(void *pvParameters) { for(;;) { vTaskDelay(pdMS_TO_TICKS(1000)); // 任务阻塞1秒 } } // 解析任务状态并打印 void vPrintTaskState(eTaskState eState) { switch(eState) { case eRunning: printf(状态运行(Running)\r\n); break; case eReady: printf(状态就绪(Ready)\r\n); break; case eBlocked: printf(状态阻塞(Blocked)\r\n); break; case eSuspended: printf(状态挂起(Suspended)\r\n); break; case eDeleted: printf(状态已删除(Deleted)\r\n); break; default: printf(状态未知\r\n); break; } } // 查询单个任务状态的函数 void vCheckSingleTaskState(void) { // 1. 查询当前任务的状态 eTaskState eCurrentState xTaskGetTaskState(NULL); printf(当前任务); vPrintTaskState(eCurrentState); // 2. 查询指定任务的状态需任务句柄 if(xTestTaskHandle ! NULL) { eTaskState eTestState xTaskGetTaskState(xTestTaskHandle); printf(测试任务); vPrintTaskState(eTestState); } } // 创建任务 void vCreateTasks(void) { xTaskCreate(vTestTask, // 任务函数 TestTask, // 任务名 1024, // 堆栈大小字 NULL, // 参数 tskIDLE_PRIORITY 1,// 优先级 xTestTaskHandle); // 任务句柄 }方法 2批量查看所有任务状态vTaskList这是最常用的全局监控方式能一次性获取所有任务的状态、优先级、堆栈等信息需先开启配置宏// 在FreeRTOSConfig.h中开启 #define configUSE_TRACE_FACILITY 1 #define configUSE_STATS_FORMATTING_FUNCTIONS 1批量查询代码示例#include FreeRTOS.h #include task.h #include stdio.h // 缓冲区需足够大根据任务数量调整建议1024字节以上 #define TASK_LIST_BUFFER_SIZE 1024 static char pcTaskListBuffer[TASK_LIST_BUFFER_SIZE]; // 打印所有任务状态及信息 void vPrintAllTaskStates(void) { // 获取所有任务信息状态、优先级、堆栈等 vTaskList(pcTaskListBuffer); // 格式化打印 printf(\r\n); printf(任务名\t状态\t优先级\t剩余堆栈\t任务ID\r\n); printf(-----------------------------------------\r\n); printf(%s, pcTaskListBuffer); printf(\r\n); } // 示例在低优先级任务中定时打印 void vMonitorTask(void *pvParameters) { for(;;) { vPrintAllTaskStates(); // 打印所有任务状态 vTaskDelay(pdMS_TO_TICKS(2000)); // 每2秒打印一次 } }典型输出结果任务名 状态 优先级 剩余堆栈 任务ID-----------------------------------------IDLE R 0 118 1TestTask B 1 980 2Monitor R 2 856 3UART B 3 720 4状态缩写对应R运行 / 就绪、B阻塞、S挂起、D已删除单核 CPU 中R状态只会出现在当前正在运行的任务上其他就绪任务也显示为R三、进阶结合任务名查询状态xTaskGetHandle如果只有任务名没有任务句柄可先通过任务名获取句柄再查询状态// 根据任务名获取句柄注意需开启configUSE_APPLICATION_TASK_TAG1 TaskHandle_t xHandle xTaskGetHandle(TestTask); if(xHandle ! NULL) { eTaskState eState xTaskGetTaskState(xHandle); printf(TestTask状态); vPrintTaskState(eState); } else { printf(未找到TestTask任务\r\n); }四、注意事项API 调用上下文xTaskGetTaskState()可在任务 / 中断中调用中断中需用xTaskGetTaskStateFromISRvTaskList()禁止在中断中调用且会短暂关闭调度器建议在低优先级任务中使用配置依赖所有状态查询功能都需要开启configUSE_TRACE_FACILITY1否则 API 不可用状态判断逻辑阻塞状态eBlocked任务因vTaskDelay、等待信号量 / 队列、等待事件等进入挂起状态eSuspended仅通过vTaskSuspend()/xTaskResume()主动控制就绪状态eReady任务已就绪但未被调度和运行状态共用R缩写总结查询单个任务状态用xTaskGetTaskState()需传入任务句柄返回枚举类型的完整状态批量查看所有任务状态用vTaskList()输出包含状态、优先级、堆栈等综合信息最适合全局监控状态缩写中R代表运行 / 就绪、B代表阻塞、S代表挂起是调试中最常关注的三种状态。通过这些方法你可以全面监控 FreeRTOS 中所有任务的运行状态快速定位任务阻塞、挂起等异常问题。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【SAP】FI知识补充 2026/9/5 23:58:15

【SAP】FI知识补充

1.清账清的是启用了未清项管理的科目。GR借:原材料贷:GR/IRIR借:GR/IR贷:供应商(应付)付款借:供应商(应付)贷:银行存款贷:尾差(营业外…

阅读更多 →
M3FD 数据集介绍、下载及YOLO/VOC/COCO训练格式转换 2026/9/5 23:58:15

M3FD 数据集介绍、下载及YOLO/VOC/COCO训练格式转换

M3FD 完整数据集下载目录 同时包含三种主流标注格式:COCO JSON、VOC XML、YOLO TXT M3FD 数据集🌑:数据集介绍、下载📥 | 目标检测 | 多模态🧩 | 水平框📌|原始图像✅|VOC标签✅ |…

阅读更多 →
基于YOLOv8的农作物长势监测系统:从数据标注到GUI部署全流程实践 2026/9/5 23:58:15

基于YOLOv8的农作物长势监测系统:从数据标注到GUI部署全流程实践

简介:本资源是一套基于YOLOv8实现的农作物长势监测系统完整工程包,面向计算机、人工智能、农业信息化等专业的本科生与研究生,解决农业场景中作物类别识别、生长状态评估与可视化分析的实际问题,特别适合作为毕业设计、课程设计或…

阅读更多 →
ATR-UMOD 数据集介绍、下载及YOLO/VOC/COCO训练格式转换 2026/9/5 23:58:15

ATR-UMOD 数据集介绍、下载及YOLO/VOC/COCO训练格式转换

ATR-UMOD 完整数据集下载目录 同时包含三种主流标注格式:COCO JSON、VOC XML、YOLO TXT ATR-UMOD 数据集🌑:数据集介绍、下载📥 | 目标检测 | 多模态🧩 | 水平框&旋转框📌|原始图像✅ | 原…

阅读更多 →
Mybatis高阶 2026/9/5 23:58:15

Mybatis高阶

动态SQL当我们注册页面时,当中的所要填入的选项有必选项和非必需选项,而非必选项当中用户可能会有不确定的选项时,应该采取默认值而不是将数值置为null,那么怎么解决这一问题,就需要使用动态SQL语句来实现<if>标签<insert id"insertByCondition">insert …

阅读更多 →
Unveiling the Latent Directions of Reflection in Large Language Models 2026/9/5 23:55:15

Unveiling the Latent Directions of Reflection in Large Language Models

论文《Unveiling the Latent Directions of Reflection in Large Language Models》总结与翻译 一、文章主要内容 该论文聚焦大型语言模型(LLMs)中的反思机制,突破以往多关注反思提示策略或强化学习目标的研究局限,从模型激活的潜在方向切入,探索反思的内在机制。 核心…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞