Freertos查询剩余栈空间

编程入门 行业动态 更新时间:2024-10-09 06:23:55

Freertos查询<a href=https://www.elefans.com/category/jswz/34/1764768.html style=剩余栈空间"/>

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 定义为 1uxTaskGetStackHighWaterMark 函数才可用	
*/		//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()函数目前暂时没有用,使用方法代码稍微多些

更多推荐

Freertos查询剩余栈空间

本文发布于:2024-02-19 15:55:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764450.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:剩余   空间   Freertos

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!