freertos查看任务栈剩余空间

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 23:36   11   0

在freertos里面创建任务时会遇到需要配置任务栈空间的大小也就是下面这个函数中的usStackDepth参数(需要注意的是这个参数的单位是字(word),而不是字节)

portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode, 
                          const signed portCHAR* const pcName, 
                          unsigned portSHORT usStackDepth, 
                          void *pvParameters, 
                          unsigned portBASE_TYPE uxPriority, 
                          xTaskHandle *pxCreatedTask);

如果这里随意分配就有可能意味着浪费或者程序挂死在这里,而要知道这里到底应该怎么分配,网上的说法好像都是说的需要自己通过计算函数的形参,临时变量等的总大小再乘以1.5到2来分配,但是感觉这样也太麻烦了(其实是自己对函数形参,函数到底需要多少个字节记得不清楚了),所以又找了下能不能查到任务到底需要多少空间,就有了这篇博客。

官方文档提供了下面这个函数来查询任务栈的剩余空间

UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)

其中xTask即为上面创建任务时获取到的任务句柄,返回值即为任务栈空间剩余的大小(这里的单位也是字)。

在使用上面这个函数之前需要在FreeRTOSConfig.h中将INCLUDE_uxTaskGetStackHighWaterMark配置为1,如果没有则增加此定义,下面放出一段示例代码:

void ToggleLed4(void * pvParameters)
{
  unsigned portBASE_TYPE uxHighWaterMark;
  while(1)
  {
    uxHighWaterMark=uxTaskGetStackHighWaterMark( pvCreatedTask_ToggleLed4 );
       printf("size = %d\r\n",uxHighWaterMark);
    vTaskDelay(500);
  }
}

参考地址:https://www.cnblogs.com/suozhang/p/5301054.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP