This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

最近用STM32L073RZ 移植了FreeRTOS,  关于 xTaskCreate()中usStackDepth 应该填多少才合适呢?

#define configMINIMAL_STACK_SIZE         ( ( uint16_t ) 128 )

#define configTOTAL_HEAP_SIZE         ( ( size_t ) ( 2 * 1024 ) )

configuration file 里面 这两个选项是按照 nucleo 提供的 例子,填的。

main 函数中只做了 一个LED  toggle 的 task

int main(void)

{

  HAL_Init();

  /* Configure the system clock to 2 MHz */

  SystemClock_Config();

  //BSP driver init

  BSP_Init();

   

  xTaskCreate( vTaskLEDBlink, "vTaskLED", 512, NULL, 2, &xHandleTaskLED ); 

 

  /* Add your application code here */

  vTaskStartScheduler();

  /* Infinite loop */

  while (1)

  {

  }

}

当   xTaskCreate( vTaskLEDBlink, "vTaskLED", 512, NULL, 2, &xHandleTaskLED );  填入512时,程序下载后,LED 没有实现toggle

当  xTaskCreate( vTaskLEDBlink, "vTaskLED", 128, NULL, 2, &xHandleTaskLED );  填入128时, 程序下载后,LED 可以实现Toggle 。

我不明白的时候 如果填入512  内存不足,为什么没有任何提示?

如果以后 有其他task  这个值应该填多少合适呢?  有没有 依据 可以参考?

  • 此问题转为自由讨论。

    @一下 ST的工程师帮忙看看

    amanda_s

  • 这里usStackDepth 设置数据的单位是字,即4字节。你512意味着512*4 字节。

    至于没有提示,这跟IDE及相关工具有关。

    你配置stackdepth大小的依据主要考虑CPU通用寄存器个数【可以按16个估算】和你任务中局部变量的个数,考虑到程序中调用及嵌套等,把数据设置为二者和的2-4倍差不多了。

    你可以先往大设置,再试试往下调整。另外,注意栈的8字节对齐。