我正在使用带有 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