我正在尝试esp32和freertos。我想从另一个任务t2
创建一个新任务t1
。在t2
中,我在for
循环中打印语句,但是for
循环在第一次打印后停止打印,并且ESP32模块仅在第一次打印后卡住。以下是我正在使用的代码:
void t2(void *pvParam){
ESP_LOGI(TAG,"task 2 started \n");
int i = 0;
for(i = 0; i < 3; i++)
print("...task 2 printing\n");
}
void t1(void)
{
BaseType_t xReturned;
TaskHandle_t xHandle = NULL;
xReturned = xTaskCreate(&t2,"t2",4048,NULL,configMAX_PRIORITIES-1,&xHandle);
printf("xReturned = %d \n", xReturned);
if(xReturned == pdPASS)
{
vTaskDelete( xHandle );
}
}
void app_main()
{
xTaskCreate(&t1,"namet",4048,NULL,configMAX_PRIORITIES- 1,NULL);
}
出现上述问题的原因是什么?
答案 0 :(得分:0)
两个任务都没有无限循环。他们只是完成。他们做了1次工作,仅此而已。
我不明白您的目的,但是如果您只是想尝试(这不是一个适当的解决方案),则可以在t1中进行无限循环,并以更高的优先级创建t2(因此(t1不会干扰并在t2完成之前再次调用xTaskCreate()
),请保留t2代码不变。那应该使其成为“继续打印”。
void t1(void)
{
while (1)
{
BaseType_t xReturned;
TaskHandle_t xHandle = NULL;
xReturned = xTaskCreate(&t2,"t2",4048,NULL,configMAX_PRIORITIES,&xHandle);
printf("xReturned = %d \n", xReturned);
if(xReturned == pdPASS)
{
vTaskDelete( xHandle );
}
}
}
您需要明确定义您的目标,才能设计出一个好的设计。您必须考虑调度策略(抢先,合作),任务优先级,激活等。