STM32+FREERTOS任务堆栈大小

在FREERTOS任务开发过程中,由于不知道具体需要分配多大的任务堆栈大小,就需要在开始开发阶段尽可能的多分配一些,不然在调试过程中会出现程序卡死或者数据通信异常的现象。

如何评估任务堆栈的分配大小问题,可以根据任务的规模以及所任务所需的数据空间大概进行估算一个值。这个值最好是128的整数倍。因为在FreeRTOSConfig.h已经设置了最小的任务堆栈大小

#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)

还可以先分配一个大的任务堆栈,开发完成后根据测试的实际任务堆栈使用情况再去优化任务堆栈大小,节省资源。

具体步骤:

1、在FreeRTOSConfig.h中增加配置

#define INCLUDE_uxTaskGetStackHighWaterMark  1

2、调用uxTaskGetStackHighWaterMark()

通过uxTaskGetStackHighWaterMark可以获取任务堆栈所剩余的空间大小,根据这个数值来优化修改创建任务时的DEFAULT_STACKSIZE大小。

osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, DEFAULT_STACKSIZE);

代码是:

printf(" Task free stack size is %ld\r\n",(int32_t)uxTaskGetStackHighWaterMark(NULL));

 

物联沃分享整理
物联沃-IOTWORD物联网 » STM32+FREERTOS任务堆栈大小

发表评论