在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));文章来源:https://www.toymoban.com/news/detail-579083.html
文章来源地址https://www.toymoban.com/news/detail-579083.html
到了这里,关于STM32+FREERTOS任务堆栈大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!