STM32 - 实时操作系统 - 最大堆栈大小



我正在使用带有 2 个线程的 RTOS STM32F103R8T6

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

当我尝试为 Any 线程提供>512 的堆栈大小时,两个任务都没有运行,但是当使用 128 和 256 作为上述示例时,一切都很好。

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

在我的实时操作系统配置中

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

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

在这种情况下:

  • 任务A 512 字 = 2048b
  • 任务B 128 字 = 512b
  • 总计 = 2560b

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

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

相关内容

  • 没有找到相关文章

最新更新