Создание нового задания из другого задания - PullRequest
0 голосов
/ 25 августа 2018

Я экспериментирую с 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 голосов
/ 29 августа 2018

Обе задачи не имеют бесконечного цикла.Они просто бегут к завершению.Они делают эту работу 1 раз, а потом не болееt2 с более высоким приоритетом (чтобы t1 не вмешивался и не вызывал xTaskCreate() до завершения t2), оставьте код 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 );
    }
 }
}  

Вам нужно четко определить свою цель, чтобы придумать хороший дизайн.Необходимо принять во внимание политику планирования (упреждающий, совместный), приоритеты задач, активацию и т. Д.

...