Freertos查询剩余栈空间

最近才开始接触RTOS,使用cubemx直接创建,只简单测试了能否跑任务,但是不清楚到底该创建多少空间。后续内容再慢慢学习(磨洋工)

记录 备忘。

#include "MyTask.h"
TaskHandle_t LED_Handle;
TaskHandle_t USART_Handle;
	
//存储计算未使用堆栈空间返回值
UBaseType_t uxHighWaterMark_LED; 
UBaseType_t uxHighWaterMark_USART; 

void CreateTask()
{		
	//创建任务以字为单位,32位系统1字=4字节
	//LED任务为100*4个字节

	xTaskCreate(LED_Task, "LED", 100, NULL, 1, &LED_Handle);
	xTaskCreate(USART_Task, "USART", 256, NULL, 1, &USART_Handle);
}


void LED_Task( void *pvParameters )
{
/*
	FreeRTOS.h 中将 INCLUDE_uxTaskGetStackHighWaterMark 定义为 1
	uxTaskGetStackHighWaterMark 函数才可用	
*/		
		//uxHighWaterMark_LED = uxTaskGetStackHighWaterMark( LED_Handle );
	
		for( ;; )
		{
			HAL_GPIO_WritePin(D2_GPIO_Port,D2_Pin,GPIO_PIN_RESET);
			osDelay(500);
			HAL_GPIO_WritePin(D2_GPIO_Port,D2_Pin,GPIO_PIN_SET);
			osDelay(500);
			//形参为NULL,则查看当前任务
			uxHighWaterMark_LED = uxTaskGetStackHighWaterMark( LED_Handle );
		}
}

void USART_Task( void *pvParameters   )
{
		for( ;; )
		{
			Send_Data();
			osDelay(100);
			uxHighWaterMark_USART=uxTaskGetStackHighWaterMark( NULL );
		}
}

在debug调试中已经显示10进制格式,将返回值*4则是剩余字节。

我发现在LED程序中将 uxTaskGetStackHighWaterMark中的形参换成NULL剩余量则会减少2,不知道什么原因,在串口发送程序中则没有影响。

xPortGetFreeHeapSize()
这个函数可以获取调用时堆中空闲内存的大小,以字节为单位。使用它可以优化堆的大小。需要注意,当使用heap_3时是不能调用这个函数的。


xPortGetMinimumEverFreeHeapSize()
此函数返回FreeRTOS应用程序开始运行之后曾经存在的最小的未被分配的存储空间的字节数。它的返回值指示了应用程序离将要耗尽堆空间的接近程度。需要注意只在使用heap_4或者heap_5时生效。

size_t a;
void test_Task( void *pvParameters )
{
	
		for( ;; )
		{
			a=xPortGetMinimumEverFreeHeapSize();
			osDelay(200);
			uxHighWaterMark_Sensor = uxTaskGetStackHighWaterMark( NULL );
		}
}

还有一个uxTaskGetSystemState()函数目前暂时没有用,使用方法代码稍微多些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风飘零翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值