FreeRTOS中与任务相关的一些辅助函数

  1. 函数 uxTaskPriorityGet()
    函数原型UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask )
    示例:
UBaseType_t query_priority,led_priority;
query_priority = uxTaskPriorityGet(QueryTask_Handler);	//获取优先级
printf("query_priority = %d\r\n",query_priority);
  1. 函数 vTaskPrioritySet()和vtaskList()
    void vTaskPrioritySet( TaskHandle_t xTask,UBaseType_t uxNewPriority )
    示例:
vTaskPrioritySet(LEDTask_Handler, 5);	//更改优先级,最好由系统调用,用户最好不调用
led_priority = uxTaskPriorityGet(LEDTask_Handler);
printf("led_priority = %d\r\n",led_priority);
  1. uxTaskGetSystemState()
    UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
    const UBaseType_t uxArraySize,
    uint32_t * const pulTotalRunTime )
    示例:
uint32_t TotalRunTime;
UBaseType_t taskstate_num;
TaskStatus_t * TaskStatusArray;
UBaseType_t num;
num = uxTaskGetNumberOfTasks();
TaskStatusArray = pvPortMalloc(num*sizeof(TaskStatus_t));
if(TaskStatusArray != NULL)	//申请空间是否成功
{
	taskstate_num = uxTaskGetSystemState((TaskStatus_t *	) TaskStatusArray,	
										 (UBaseType_t 		) num, 
										 (uint32_t *		) &TotalRunTime);	//返回统计任务状态的任务个数
	printf("TaskName\t\tPriority\t\tTaskNumber\t\tWaterMark\t\t\r\n");
	for(int x=0;x<num;x++)
	{
		//通过串口打印出获取到的系统任务的有关信息,比如任务名称、
		//任务优先级和任务编号。
		printf("%s\t\t%d\t\t\t%d\t\t\t%d\t\t\r\n",				
				TaskStatusArray[x].pcTaskName,
				(int)TaskStatusArray[x].uxCurrentPriority,
				(int)TaskStatusArray[x].xTaskNumber,
				(uint16_t)TaskStatusArray[x].usStackHighWaterMark);
		
	}
}

与之功能一样且用起来方便的函数为void vTaskList( char * pcWriteBuffer ),可以直接获取各个任务的信息,然后存储在pcWriteBuffer字符指针中,但是这个字符数组须要在任务外面定义,否则会占用很大一部分堆栈空间。
示例:

vTaskList(InfoBuffer);							//获取所有任务的信息
printf("%s\r\n",InfoBuffer);					//通过串口打印所有任务的信息
  1. vTaskGetInfo()
    与3中的任务函数功能一样,这个是统计单个任务的状态信息的。

  2. uxTaskGetStackHighWaterMark()
    此函数用于检查任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!
    注意:这几个函数都会消耗一定时间,所以最好用在调试阶段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值