我无法在freeRTOS

时间:2016-10-15 02:06:16

标签: freertos

当我在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!!! ***/

2 个答案:

答案 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()。