1 (edited by reachim 2023-09-01 18:32:42)

Topic: FreeRTOS

Доброго времени!
Подскажите, пожалуйста, как создать задачу RemoteXY_Handler () в FreeRTOS ?

Пробовал так, пишет ошибка:

void Task_RemoteXY (void *pvParameters);

void setup()
{
     xTaskCreate(Task_RemoteXY, "RemoteXY", 20240, NULL, 2, NULL);
}

void loop() {}

void Task_RemoteXY (void *pvParameters)
{
    RemoteXY_Init ();
    for (;;)
    {
      RemoteXY_Handler ();
      vTaskDelay( 500 / portTICK_PERIOD_MS );
    }
}

Пробовал и так, тоже ошибка:

void RemoteXY_Handler (void *pvParameters);

void setup()
{
  RemoteXY_Init ();
  xTaskCreate(RemoteXY_Handler, "RemoteXY_Handler", 20480, NULL, 2, NULL);
}

void loop() {}

void RemoteXY_Handler (void *pvParameters)
{
  for (;;)
  {
    RemoteXY_Handler ();
    vTaskDelay( 500 / portTICK_PERIOD_MS );
  }
}

2

Re: FreeRTOS

500 мс это возможно очень много. Входной буфер последовательного порта успеет переполниться до того как RemoteXY сможет считать из него данные.
Пробуйте вызывать RemoteXY в каждом тике. Если во входном буфере последовательного порта нет данных то RemoteXY_Handler() практически сразу сделает return.

3

Re: FreeRTOS

Большон спасибо, REMOTEXY !
Все работает !

Была еще ошибка и в объявлении задачи, название совпало!
Вот рабочий код:

void RemXY (void *pvParameters);

void setup()
{
  RemoteXY_Init ();
  xTaskCreate(RemXY, "RemoteXY", 20480, NULL, 2, NULL);
}

void loop() {}

void RemXY (void *pvParameters)
{
  for (;;)
  {
    RemoteXY_Handler ();
    vTaskDelay( 10 / portTICK_PERIOD_MS );
  }
}