首页 > 其他分享 >FreeRTOS操作系统(详细速通篇)——— 第十章

FreeRTOS操作系统(详细速通篇)——— 第十章

时间:2024-07-25 14:29:36浏览次数:13  
标签:优先级 函数 FreeRTOS 句柄 通篇 第十章 获取 任务 API

        本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!

目录

FreeRTOS任务相关API函数

1 任务优先级相关API函数

(1)uxTaskPriorityGet

(2)vTaskPrioritySet

2 任务数量及状态查询API函数

(1)uxTaskGetNumberOfTasks

(2)uxTaskGetSystemState

3 任务信息获取API函数

(1)vTaskGetInfo

(2)xTaskGetCurrentTaskHandle

(3)xTaskGetHandle

4 任务栈和状态相关API函数

(1)uxTaskGetStackHighWaterMark

(2)eTaskGetState

5 任务栈和状态相关API函数

(1)vTaskList

(2)vTaskGetRunTimeStats


FreeRTOS任务相关API函数

       FreeRTOS提供的丰富API函数为开发者在任务管理、状态查询和时间统计等方面提供了强有力的支持。通过合理使用这些API函数,可以显著提高嵌入式系统的开发效率和运行性能。在实际应用中,开发者应根据项目需求选择合适的API函数,并注意相关宏定义的配置,以充分发挥FreeRTOS的功能优势。        

       以下函数为获取任务相关数据的API函数,现在不必熟练使用,知道每个函数具体是用来做什么的即可,下文将对以下函数进行详细介绍

函数作用

uxTaskPriorityGet()

获取任务优先级

vTaskPrioritySet()

设置任务优先级

uxTaskGetNumberOfTasks()

获取系统中任务的数量

uxTaskGetSystemState()

获取所有任务状态信息

vTaskGetInfo()

获取指定单个的任务信息

xTaskGetCurrentTaskHandle()

获取当前任务的任务句柄

xTaskGetHandle()

根据任务名获取该任务的任务句柄

uxTaskGetStackHighWaterMark()

获取任务的任务栈历史剩余最小值

eTaskGetState()

获取任务状态

vTaskList()

获取任务状态

vTaskGetRunTimeStats()

获取任务的运行时间

1 任务优先级相关API函数

(1)uxTaskPriorityGet

函数原型:UBaseType_t  uxTaskPriorityGet(  const TaskHandle_t xTask  )

函数作用:uxTaskPriorityGet函数用于获取指定任务的优先级

使用前提:使用该函数前需在配置文件中将宏INCLUDE_uxTaskPriorityGet置为1

其返回值:任务优先级数值

形式参数:

形参

描述

            xTask

要查找的任务句柄,NULL代表任务自身

函数使用:

// 获取当前任务的优先级
TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); // 获取当前任务的任务句柄
UBaseType_t uxPriority = uxTaskPriorityGet(xHandle); // 获取任务优先级
printf("Current Task Priority: %u\n", uxPriority); // 打印任务优先级
(2)vTaskPrioritySet

函数原型:void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )

函数作用:vTaskPrioritySet函数用于设置指定任务的优先级

使用前提:使用该函数前需在配置文件中将宏INCLUDE_vTaskPrioritySet置为1

形式参数:

形参

描述

                     xTask

任务句柄,NULL代表任务自身

uxNewPriority

需要设置的任务优先级

函数使用:

// 设置当前任务的优先级为3
TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); // 获取当前任务的任务句柄
vTaskPrioritySet(xHandle, 3); // 设置任务优先级为3
printf("Task Priority Set to 3\n"); // 打印设置优先级的信息

2 任务数量及状态查询API函数

(1)uxTaskGetNumberOfTasks

函数原型:UBaseType_t uxTaskGetNumberOfTasks( void )

函数作用:用于获取当前系统中的任务数量

使用前提:

其返回值:系统中任务的数量

形式参数:

函数使用:

// 获取系统中任务的数量
UBaseType_t uxNumberOfTasks = uxTaskGetNumberOfTasks(); // 获取任务数量
printf("Number of Tasks: %u\n", uxNumberOfTasks); // 打印任务数量
(2)uxTaskGetSystemState

函数原型:UBaseType_t uxTaskGetSystemState( TaskStatus_t *pxTaskStatusArray, UBaseType_t uxArraySize, configRUN_TIME_COUNTER_TYPE *pulTotalRunTime );

函数作用:用于获取系统中所有任务的状态信息

使用前提:使用该函数前需在配置文件中将宏configUSE_TRACE_FACILITY置为1

其返回值:获取信息的任务数量

形式参数:

形参

描述

xTaskStatusArray

指向TaskStatus_t 结构体数组首地址

uxArraySize

接收信息的数组大小

pulTotalRunTime

系统总运行时间,为NULL 则省略总运行时间值

函数使用:

// 获取系统中所有任务的状态信息
TaskStatus_t pxTaskStatusArray[10]; // 定义TaskStatus_t数组用于存储任务状态信息
UBaseType_t uxTasks = uxTaskGetSystemState(pxTaskStatusArray, 10, NULL); // 获取任务状态信息
printf("Number of Tasks Retrieved: %u\n", uxTasks); // 打印获取到的任务数量


// 获取的信息内容如下

TaskHandle_t 			xHandle;                       		/* 任务句柄 */ 
    const char *		 		pcTaskName;                 /* 任务名 */ 
    UBaseType_t			xTaskNumber;                     	/* 任务编号 */ 
    eTaskState e				CurrentState;               /* 任务状态 */ 
    UBaseType_t 			uxCurrentPriority;              /* 任务优先级 */ 
    UBaseType_t 			uxBasePriority;                 /* 任务原始优先级*/ 
    configRUN_TIME_COUNTER_TYPE 	ulRunTimeCounter; 		/* 任务运行时间*/
    StackType_t * 			pxStackBase;                    /* 任务栈基地址 */ 
    configSTACK_DEPTH_TYPE 	usStackHighWaterMark;  	        /* 任务栈历史剩余最小值 */ 

3 任务信息获取API函数

(1)vTaskGetInfo

函数原型:void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState )

函数作用:用于获取指定任务的详细信息

使用前提:使用该函数前需在配置文件中将宏configUSE_TRACE_FACILITY置为1

其返回值:无

形式参数:

形参

描述

xTask

指定获取信息的任务的句柄

pxTaskStatus

接收任务信息的变量

xGetFreeStackSpace

任务栈历史剩余最小值,

当为“pdFALSE” 则跳过这个步骤,

当为“pdTRUE”则检查历史剩余最小堆栈

eState

任务状态,可直接赋值,如想获取代入“eInvalid”

函数使用:

// 获取当前任务的详细信息
TaskStatus_t xTaskDetails; // 定义TaskStatus_t结构体用于存储任务信息
vTaskGetInfo(xTaskGetCurrentTaskHandle(), &xTaskDetails, pdTRUE, eInvalid); // 获取任务信息
printf("Task Name: %s\nTask Priority: %u\n", xTaskDetails.pcTaskName, xTaskDetails.uxCurrentPriority); // 打印任务名称和优先级
(2)xTaskGetCurrentTaskHandle

函数原型:TaskHandle_t xTaskGetCurrentTaskHandle( void )

函数作用:函数用于获取当前任务的句柄

使用前提:使用该函数前需在配置文件中将宏INCLUDE_xTaskGetCurrentTaskHandle置为1

其返回值:当前任务的句柄

形式参数:

函数使用:

// 获取当前任务的句柄
TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); // 获取当前任务的句柄
printf("Current Task Handle: %p\n", (void*)xHandle); // 打印任务句柄
(3)xTaskGetHandle

函数原型:TaskHandle_t xTaskGetHandle( const char *pcNameToQuery )

函数作用:函数用于通过任务名获取任务的句柄

使用前提:使用该函数前需在配置文件中将宏INCLUDE_xTaskGetHandle置为1

其返回值:目标任务的句柄

形式参数:

形参

描述

pcNameToQuery

  任务名

函数使用:

// 通过任务名获取任务的句柄
TaskHandle_t xHandle = xTaskGetHandle("TaskName"); // 获取任务句柄
printf("Task Handle for 'TaskName': %p\n", (void*)xHandle); // 打印任务句柄

4 任务栈和状态相关API函数

(1)uxTaskGetStackHighWaterMark

函数原型:UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );

函数作用:用于获取指定任务的任务栈历史最小剩余堆栈

使用前提:使用该函数前需在配置文件中将宏INCLUDE_uxTaskGetStackHighWaterMark置为1

其返回值:任务栈的历史剩余最小值

形式参数:

形参

描述

                  xTask

                    任务句柄

函数使用:

// 获取当前任务的任务栈历史最小剩余堆栈
UBaseType_t uxHighWaterMark = uxTaskGetStackHighWaterMark(xTaskGetCurrentTaskHandle()); // 获取任务栈的历史最小剩余堆栈
printf("Stack High Water Mark: %u\n", uxHighWaterMark); // 打印任务栈的历史最小剩余堆栈
(2)eTaskGetState

函数原型:eTaskState eTaskGetState( TaskHandle_t xTask )

函数作用:函数用于获取指定任务的运行状态

使用前提:使用该函数前需在配置文件中将宏INCLUDE_eTaskGetState置为1

其返回值:任务当前的状态

形式参数:

形参

描述

                   xTask

        待获取状态任务的任务句柄

函数使用:

// 获取当前任务的运行状态
eTaskState eState = eTaskGetState(xTaskGetCurrentTaskHandle()); // 获取任务状态
printf("Current Task State: %d\n", eState); // 打印任务状态

5 任务栈和状态相关API函数

(1)vTaskList

函数原型:void vTaskList( char *pcWriteBuffer )

函数作用:函数用于以表格形式获取系统中所有任务的信息

使用前提:将宏configUSE_TRACE_FACILITYconfigUSE_STATS_FORMATTING_FUNCTIONS置为1。

其返回值:

形式参数:

形参

描述

           pcWriteBuffer

        接收任务信息的缓存指针

函数使用:

// 获取系统中所有任务的信息并打印
char pcWriteBuffer[1024]; // 定义缓存区用于存储任务信息
vTaskList(pcWriteBuffer); // 获取任务信息
printf("%s", pcWriteBuffer); // 打印任务信息
(2)vTaskGetRunTimeStats

函数原型:void vTaskGetRunTimeStats( char *pcWriteBuffer )

函数作用:函数用于统计系统中所有任务的运行时间

使用前提:将宏configGENERATE_RUN_TIME_STATSconfigUSE_STATS_FORMATTING_FUNCTIONS置为1

其返回值:

形式参数:

形参

描述

           pcWriteBuffer

        接收任务信息的缓存指针

函数使用:

// 统计系统中所有任务的运行时间
char pcWriteBuffer[1024]; // 定义缓存指针用于存储运行时间信息
vTaskGetRunTimeStats(pcWriteBuffer); // 获取任务运行时间信息
printf("%s", pcWriteBuffer); // 打印运行时间信息

     

       本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。期待诸君的关注点赞!

标签:优先级,函数,FreeRTOS,句柄,通篇,第十章,获取,任务,API
From: https://blog.csdn.net/weixin_49007164/article/details/140521470

相关文章

  • 第四十八天 第十章 单调栈part01 739. 每日温度 496.下一个更大元素 I 503.下一个更大
     739.每日温度 使用单调栈:注意栈中的递增递减顺序。classSolution{public:vector<int>dailyTemperatures(vector<int>&temperatures){vector<int>res(temperatures.size(),0);stack<int>sta;sta.push(0);for(int......
  • FreeRTOS操作系统(详细速通篇)——— 第八章
            本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!目录列表与列表项管理1列表与列表项简介1.1定义1.2结构体介绍2相关API函数介绍2.1......
  • 移植FreeRTOS于LPC54608芯片,IAR
      1.源码下载·        在移植之前,我们首先要获取到FreeRTOS的官方的源码包FreeRTOS-MarketleadingRTOS(RealTimeOperatingSystem)forembeddedsystemswithInternetofThingsextensions直接在官网下载freertos源码包。下载后打开文件夹可以看到......
  • 嵌入式C++、FreeRTOS、MySQL、Spring Boot和MQTT协议:智能零售系统详细流程介绍(代码示
    项目概述随着科技的发展,零售行业正经历着一场数字化转型。智能零售系统通过集成嵌入式技术和大数据分析,为商家提供了高效的运营管理工具。该系统的核心目标是提升顾客体验、优化库存管理、降低运营成本以及实现精准营销。本项目将结合多种技术栈,包括嵌入式硬件、嵌入式软件、......
  • 牛客FreeRTOS刷题总结
    1.在FreeRTOS中延时函数也相对模式和绝对模式,在FreeRTOS中不同的模式用的函数不同,其中函数vTaskDelay()是相对模式(相对延时函数),函数vTaskDelayUntil()是绝对模式(绝对延时函数)。两者都会阻塞任务。具体内容可以看博客这一篇:https://www.cnblogs.com/bathwind/p/18139217......
  • FreeRTOS操作系统(详细速通篇)——— 第六章
        本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!目录系统中断管理1什么是中断?1.1中断定义1.2中断执行机制​2中断优先级如何分组 2.1优先级......
  • FreeRTOS【面试】实时操作系统的知识总结
    RTOS的实时性是如何实现的?任务之间是如何通信的?二值信号量与互斥信号量的区别?优先级反转?如何解决优先级反转问题?任务通知是怎么实现的?框架性的回答一个嵌入式系统Freertos的启动到结束的过程?任务切换的原理? 除了任务切换对freertos其他底层了解吗?讲讲FreeRT......
  • FreeRTOS操作系统(详细速通篇)——— 第四章
             本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!目录任务创建和删除1任务创建方式1.1动态任务创建1.2静态任务创建2任务删除函数......
  • FreeRTOS操作系统(详细速通篇)——— 第一章
            本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅目录1FreeRTOS简介1.1 什么为FreeRTOS?1.2为什么选择FreeRTOS?1.3FreeRTOS与裸机的区......
  • FreeRTOS
    1.栈的大小栈的大小通常指的是每个任务(或线程)在运行时分配的内存空间,用于存储局部变量、函数调用信息(如返回地址、参数等)、临时数据等。它和任务的大小有一定关系,但并不是直接对应的。代码片段中:_Min_Heap_Size=0x400;/*requiredamountofheap*/_Min_Stack_Size=0x10......