freertos查看任务栈剩余空间

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值