Page 1 of 1

代码运行错误,望大家指点

Posted: Wed Aug 04, 2021 8:22 am
by yogi_yi
下列代码运行出现如下错误
100Task 1 is running

***ERROR*** A stack overflow in task Task 1 has been detected.

void vTask1( void *pvParameters )
{
const char *pcTaskName = "Task 1 is running\r\n";
volatile unsigned long ul;
int num_nn = 100;
//num_nn++;
//printf("%c", num_nn );
/* 和大多数任务一样,该任务处于一个死循环中。 */
for( ;; ){
/* Print out the name of this task. */
//printf("%d/r/n", num_nn );
printf("%d", num_nn );
printf("%s", pcTaskName );

/* 延迟,以产生一个周期 */
vTaskDelay(200 / portTICK_PERIOD_MS);
}
}


如果代码中改为
uint8_t num_nn=100;
printf("%c", num_nn );

或者将printf("%d", num_nn ); 写在TASK1之外
则不会出现运行错误。

Re: 代码运行错误,望大家指点

Posted: Wed Aug 04, 2021 10:01 am
by ESP_Gargamel
vTask1 的 stack size 太小了,printf 用的栈比较深。

Re: 代码运行错误,望大家指点

Posted: Thu Aug 05, 2021 7:45 am
by yogi_yi
我用

uint8_t num_nn=100;
printf("%c", num_nn );

代替 TASK1中的

int num_nn = 100;
printf("%d", num_nn );

可以运行 ,栈的深度差异这么大吗???

Re: 代码运行错误,望大家指点

Posted: Wed Aug 11, 2021 2:15 am
by ESP_Gargamel
printf("%c", num_nn ); 会被优化成 putchar。
printf("%d", num_nn ); 还是 printf,栈会比较深。

你可以想办法用 uxTaskGetStackHighWaterMark 来获取一下栈的深度差异。