freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

摘要

每个任务都有自己的堆栈,堆栈的总大小在创建任务的时候就确定了,此函数用于检查任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!FreeRTOS 把这个历史剩余最小值叫做“高水位线”。此函数相对来说会多耗费一点时间,所以在代码调试阶段可以使用,产品发布的时候最好不要使用。

使用说明

要使用此函数的话宏INCLUDE_uxTaskGetStackHighWaterMark 必须为 1,
此函数原型如下:UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )

参数:

xTask: 要查询的任务的任务句柄,当这个参数为 NULL 的话说明查询自身任务(即调用函数 uxTaskGetStackHighWaterMark()的任务)的“高水位线”。

返回值

任务堆栈的“高水位线”值,也就是堆栈的历史剩余最小值。

例子

首先将FreeRtos.h中的INCLUDE_uxTaskGetStackHighWaterMark 置 1
在这里插入图片描述
官方介绍
**在这里插入图片描述**
在这里插入图片描述

#define START_TASK_PRIO			1
#define START_STK_SIZE			128
void start_task(void * pvParameters);  		//任务函数
TaskHandle_t StartTask_Handler;				//任务句柄

#define SYSLED_TASK_PRIO   	    2   		//led灯任务优先级
#define SYSLED_STK_SIZE    		64			//任务堆栈大小
TaskHandle_t SYSLEDTask_Handler;			//任务句柄
void sysled_task(void *pvParameters);		//led灯任务函数

//创建开始任务
	xTaskCreate	(
					(TaskFunction_t ) 	start_task,
					(const char * 	)	"start_task",
					(uint16_t 		)	START_STK_SIZE,
					(void * 		)	NULL,
					(UBaseType_t 	)	START_TASK_PRIO,
					(TaskHandle_t *	)	&StartTask_Handler
				);
					
	vTaskStartScheduler();  //开始任务调度
	while(1);



//开始任务池
void start_task(void *pvParameters)
{
	taskENTER_CRITICAL();  //进入临界区
	
	xTaskCreate((TaskFunction_t)sysled_task,	(const char *)"sysled_task",	(uint16_t)SYSLED_STK_SIZE,		(void *)NULL, (UBaseType_t)SYSLED_TASK_PRIO,	(TaskHandle_t *)&SYSLEDTask_Handler); 		//系统指示灯任务
	vTaskDelete(StartTask_Handler); //删除开始任务
	taskEXIT_CRITICAL();   			//退出临界区	
}

UBaseType_t more; 
系统指示灯
void sysled_task(void *pvParameters)
{
	while(1)
	{
		more  = uxTaskGetStackHighWaterMark(NULL);
		vTaskDelay(LED_vTASKdelay);
	}
}

DEBUG调试如下:
在这里插入图片描述

总结

在创建任务时 分配的堆栈大小是64K
目前剩余0x26换算成十进制是38K(剩余量)
所以该任务占用了64-38=26K

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值