Создаем задачи внутри самих задач, а так же удаляем задачи.

В данном уроке мы с Вами рассмотрим возможность создание очереди внутри самой очереди. А так же удалим задачу из другой задачи и саму себя.
Сам код полностью знаком с предыдущих уроков. Единственное, что добавляется, это команда удаления задачи:
vTaskDelete(TaskHandle_2) — удаляет определенную задачу из других задач.
 vTaskDelete(NULL) — удаляет текущую задачу.

Программный код:

#include <Arduino_FreeRTOS.h>

TaskHandle_t TaskHandle_1;
TaskHandle_t TaskHandle_2;
void MyTask1(void  *pvParameters);
void MyTask2(void  *pvParameters);

void setup(){
  Serial.begin(115200);
  Serial.println(«Start»);
  xTaskCreate(MyTask1, «Task1»,500, NULL, 1, &TaskHandle_1);
}

void loop(){
  Serial.println(«Stop»);
  while(1){}
}

static void MyTask1(void* pvParameters){
while(1){
  Serial.println(«S»);
  xTaskCreate(MyTask2, «Task2», 250, NULL, 2, &TaskHandle_2);
  Serial.println(«D»);
  vTaskDelete(TaskHandle_2);
  vTaskDelete(NULL);
 }
}

static void MyTask2(void* pvParameters){
while(1){
  Serial.println(«T2»);
  vTaskDelay( 50 / portTICK_PERIOD_MS );
 }
}