从另一个任务中产生新任务

时间:2018-08-25 11:41:00

标签: freertos esp32

我正在尝试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);
}

出现上述问题的原因是什么?

1 个答案:

答案 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 );
    }
 }
}  

您需要明确定义您的目标,才能设计出一个好的设计。您必须考虑调度策略(抢先,合作),任务优先级,激活等。