关于 FreeRTOS xTaskCreate 函数usStackDepth 的疑问
#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 128 )#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 2 * 1024 ) )
configuration file 里面 这两个选项是按照 nucleo 提供的 例子,填的。
main 函数中只做了 一个LEDtoggle 的 task
int main(void){
HAL_Init();
/* Configure the system clock to 2 MHz */SystemClock_Config();
//BSP driver initBSP_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这个值应该填多少合适呢?有没有 依据 可以参考?
http://www.freertos.org/FAQMem.html#StackSize #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 2 * 1024 ) )
你定义的任务堆栈大小是2048byte
如果
xTaskCreate( vTaskLEDBlink, "vTaskLED", 512, NULL, 2, &xHandleTaskLED );
请注意奥,这里的512是按4字节算的哦,512是512word,也就是2048byte
再弄个idle空任务的话,函数堆栈都出界了,所以执行错误。
由于是软件错误,跟编译和硬件没关系,所以不报错
因此,freertos的堆栈空间分配和中断嵌套是需要深入学习和一定要注意的地方 那堆得大小要如何限定呢?可以检测出已使用的空间大小吗
一般1024或者512就足够了。.MAP文件。可以看一下对应任务占用的代码空间。 whtt 发表于 2016-7-11 23:28
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 2 * 1024 ) )
你定义的任务堆栈大小是2048byte
如 ...
精辟,就是这个原因。
所以我觉得一开始 还是要先把 configuration 这个文件 里面的每个项 大概看一下,具体什么意思。
但是网上很大教 移植的都遗漏了 这一点。
所以即便你一步步按照别人 的方法进行移植, 后面程序跑起来 很多东西 也你迷迷糊糊的。。。
页:
[1]