STM32-RTOS-最大堆栈大小

时间:2018-10-14 15:13:47

标签: stm32 rtos

我正在将STM32F103R8T6与带有2个线程的RTOS一起使用

osThreadDef(ManagerTask, ManagerThread, osPriorityNormal, 0, 128);
  ManagerTaskHandle = osThreadCreate(osThread(ManagerTask), NULL);
  osThreadDef(RFIDTask, RFIDThread, osPriorityNormal, 0, 256);
  RFIDTaskHandle = osThreadCreate(osThread(RFIDTask), NULL);

当我尝试给任何线程提供大于512的堆栈大小时,都不执行任何任务,但是当使用128和256作为上述示例时,一切都很好。

那么我如何知道我可以分配给线程的最大总堆栈大小?

在我的RTOS配置中

#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)
#define configTOTAL_HEAP_SIZE                    ((size_t)3072)

1 个答案:

答案 0 :(得分:0)

如果您使用 FreeRTOS ,请记住,堆栈大小值以字为单位,而不是以字节为单位!但是configTOTAL_HEAP_SIZE以字节为单位!

在这种情况下:

  • TaskA 512个单词= 2048b
  • TaskB 128字= 512b
  • 总共有= 2560b

几乎3072 :)因此,如果您不使用其他对象,它将起作用,但是如果您增加堆栈或使用其他对象,则堆将被耗尽

来源:https://www.freertos.org/a00125.html