#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 这个值应该填多少合适呢? 有没有 依据 可以参考?
这里usStackDepth 设置数据的单位是字,即4字节。你512意味着512*4 字节。
至于没有提示,这跟IDE及相关工具有关。
你配置stackdepth大小的依据主要考虑CPU通用寄存器个数【可以按16个估算】和你任务中局部变量的个数,考虑到程序中调用及嵌套等,把数据设置为二者和的2-4倍差不多了。
你可以先往大设置,再试试往下调整。另外,注意栈的8字节对齐。