1, FreeRTOS任务相关API函数介绍(熟悉)
函数 |
描述 |
uxTaskPriorityGet() |
获取任务优先级 |
vTaskPrioritySet() |
设置任务优先级 |
uxTaskGetNumberOfTasks() |
获取系统中任务的数量 |
uxTaskGetSystemState() |
获取所有任务状态信息 |
vTaskGetInfo() |
获取指定单个的任务信息 |
xTaskGetCurrentTaskHandle() |
获取当前任务的任务句柄 |
xTaskGetHandle() |
根据任务名获取该任务的任务句柄 |
uxTaskGetStackHighWaterMark() |
获取任务的任务栈历史剩余最小值 |
eTaskGetState() |
获取任务状态 |
vTaskList() |
以“表格”形式获取所有任务的信息 |
vTaskGetRunTimeStats() |
获取任务的运行时间 |
UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask )
此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1
形参 |
描述 |
xTask |
要查找的任务句柄,NULL代表任务自身 |
返回值 |
描述 |
整数 |
任务优先级数值 |
用法
UBaseType_t priority_num = 0;
priority_num = uxTaskPriorityGet( NULL );
void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )
此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet 为 1
形参 |
描述 |
xTask |
任务句柄,NULL代表任务自身 |
uxNewPriority |
需要设置的任务优先级 |
vTaskPrioritySet( task2_handler,4 );
UBaseType_t uxTaskGetNumberOfTasks( void )
此函数用于获取系统中任务的任务数量
返回值 |
描述 |
整型 |
系统中任务的数量 |
UBaseType_t task_num = 0;
task_num = uxTaskGetNumberOfTasks();
printf("任务数量:%ld\r\n",task_num);
UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
const UBaseType_t uxArraySize,
configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime )
此函数用于获取系统中所有任务的任务状态信息,使用该函数需将configUSE_TRACE_FACILITY 置 1
形参 |
描述 |
xTaskStatusArray |
指向TaskStatus_t 结构体数组首地址 |
uxArraySize |
接收信息的数组大小 |
pulTotalRunTime |
系统总运行时间,为NULL 则省略总运行时间值 |
返回值 |
描述 |
整型 |
获取信息的任务数量 |
typedef struct xTASK_STATUS
{
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; /* 任务栈历史剩余最小值 */
} TaskStatus_t;
TaskStatus_t * status_array = 0;
UBaseType_t task_num2 = 0;
uint8_t i = 0;
status_array = mymalloc(SRAMIN,(sizeof(TaskStatus_t) * task_num));
task_num2 = uxTaskGetSystemState( status_array,task_num,NULL);
printf("任务名\t\t任务优先级\t任务编号\r\n");
for(i = 0; i < task_num2; i++)
{
printf("%s\t\t%ld\t%ld\r\n",
status_array[i].pcTaskName,
status_array[i].uxCurrentPriority,
status_array[i].xTaskNumber);
}
(2条消息) 关于C语言中.与->的区别详解_->和._One day️的博客-CSDN博客
void vTaskGetInfo( TaskHandle_t xTask,
TaskStatus_t * pxTaskStatus,
BaseType_t xGetFreeStackSpace,
eTaskState eState )
此函数用于获取指定的单个任务的状态信息,使用该函数需将宏 configUSE_TRACE_FACILITY 置 1
形参 |
描述 |
xTask |
指定获取信息的任务的句柄 |
pxTaskStatus |
接收任务信息的变量 |
xGetFreeStackSpace |
任务栈历史剩余最小值, 当为“pdFALSE” 则跳过这个步骤, 当为“pdTRUE”则检查历史剩余最小堆栈 |
eState |
任务状态,可直接赋值,如想获取代入“eInvalid” |
typedef enum
{
eRunning = 0, /* 运行态 */
eReady /* 就绪态 */
eBlocked, /* 阻塞态 */
eSuspended, /* 挂起态 */
eDeleted, /* 任务被删除 */
eInvalid /* 无效 */
} eTaskState;
status_array2 = mymalloc(SRAMIN,sizeof(TaskStatus_t));
vTaskGetInfo( task2_handler,status_array2,pdTRUE,eInvalid);
printf("任务名:%s\r\n",status_array2->pcTaskName);
printf("任务优先级:%ld\r\n",status_array2->uxCurrentPriority);
printf("任务编号:%ld\r\n",status_array2->xTaskNumber);
printf("任务状态:%d\r\n",status_array2->eCurrentState);
这里返回值为0代表运行态。返回值为1代表就绪态,以此类推。
TaskHandle_t xTaskGetCurrentTaskHandle( void )
此函数用于获取当前任务的任务句柄, 使用该函数需将宏 INCLUDE_xTaskGetCurrentTaskHandle 置 1
返回值 |
描述 |
TaskHandle_t |
当前任务的任务句柄 |
TaskHandle_t xTaskGetHandle(const char * pcNameToQuery);
此函数用于通过任务名获取任务句柄 , 使用该函数需将宏 INCLUDE_xTaskGetHandle 置 1
形参 |
描述 |
pcNameToQuery |
任务名 |
返回值 |
描述 |
TaskHandle |
任务句柄 |
TaskHandle_t task_handle = 0;
task_handle = xTaskGetHandle( "task1" );
printf("任务句柄:%#x\r\n",(int)task_handle);
printf("task1的任务句柄:%#x\r\n",(int)task1_handler);
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )
此函数用于获取指定任务的任务栈历史最小剩余堆栈;
使用该函数需将宏 INCLUDE_uxTaskGetStackHighWaterMark 置 1
形参 |
描述 |
xTask |
任务句柄 |
返回值 |
描述 |
UBaseType_t |
任务栈的历史剩余最小值 |
UBaseType_t task_stack_min = 0;
task_stack_min = uxTaskGetStackHighWaterMark( task2_handler );
printf("task2历史剩余最小堆栈为%ld\r\n",task_stack_min);
eTaskState eTaskGetState(TaskHandle_t xTask)
此函数用于查询某个任务的运行状态,使用此函数需将宏 INCLUDE_eTaskGetState 置1
形参 |
描述 |
xTask |
待获取状态任务的任务句柄 |
返回值 |
描述 |
eTaskState |
任务状态 |
typedef enum
{
eRunning = 0, /* 运行态 */
eReady /* 就绪态 */
eBlocked, /* 阻塞态 */
eSuspended, /* 挂起态 */
eDeleted, /* 任务被删除 */
eInvalid /* 无效 */
} eTaskState;
eTaskState state = 0;
state = eTaskGetState( task2_handler );
printf("当前task2的任务状态为:%d\r\n",state);
void vTaskList(char * pcWriteBuffer)
此函数用于以“表格”的形式获取系统中任务的信息 ;
使用此函数需将宏 configUSE_TRACE_FACILITY 和configUSE_STATS_FORMATTING_FUNCTIONS 置1
形参 |
描述 |
pcWriteBuffer |
接收任务信息的缓存指针 |
Name : 创建任务的时候给任务分配的名字。
State : 任务的壮态信息, B 是阻塞态, R 是就绪态, S 是挂起态, D 是删除态
Priority :任务优先级。
Stack : 任务堆栈的“高水位线”,就是堆栈历史最小剩余大小。
Num : 任务编号,这个编号是唯一的,当多个任务使用同一个任务名的时候可以通过此编号来做区分。
char InfoBuffer[100]; //保存信息的数组
//第四步:函数vTaskList()的使用
printf("/*************第三步:函数vTaskList()的使用*************/\r\n");
vTaskList(InfoBuffer); //获取所有任务的信息
printf("%s\r\n",InfoBuffer); //通过串口打印所有任务的信息
链接:https://pan.baidu.com/s/1T2DwUe-qNYesRkVrwQPz8w?pwd=rtos
提取码:rtos