当我在freeRTOS中创建5个以上的任务时,调度程序无法启动。我正在使用飞思卡尔的KL46Z Freedom板。我知道调度程序没有启动,因为当我调试程序时卡在 FOR 中,这是在启动调度程序的行之后( PEX_RTOS_START())
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
#endif
/*** End of RTOS startup code. ***/
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
for(;;){} // I GET STUCK HERE!
/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
答案 0 :(得分:1)
您的问题的解决方案是增加 FreeRTOSConfig.h 中的HEAP大小。 KL46z的默认HEAP大小为8192:
#define configTOTAL_HEAP_SIZE 8192 /* Size of heap in bytes */
我将此值增加到16384,并且有效!
#define configTOTAL_HEAP_SIZE 16384/* Size of heap in bytes */
:)
答案 1 :(得分:0)
如果您正在使用官方的FreeRTOS演示(来自FreeRTOS下载),那么请阅读循环中的评论,您说你会被卡住,它会告诉您为什么会卡在那里,并为您提供有关资源的建议你修好了您还可以查看xTaskCreate() API函数的文档,或者在编译时(而不是运行时)知道是否有足够的RAM,可以通过将configSUPPORT_STATIC_ALLOCATION设置为1,configSUPPORT_DYNAMIC_ALLOCATION来创建完全静态分配的系统。 0,并使用xTaskCreateStatic()而不是xTaskCreate()。