Задача с низким приоритетом должна запускаться сначала FreeRTOS - PullRequest
1 голос
/ 15 мая 2019

Я использую FreeRTOS и у меня в приложении несколько задач, две из которых имеют наименьший приоритет, но должны быть выполнены изначально. Давайте назовем их как Task1, Task2, Task3, Task4.

xTaskCreate(MyTask1, "Task1", 100, NULL, 1, &TaskHandle_1);
xTaskCreate(MyTask2, "Task2", 150, NULL, 1, &TaskHandle_2);
xTaskCreate(MyTask3, "Task3", 256, NULL, 2, &TaskHandle_3);
xTaskCreate(MyTask4, "Task4", 1024, NULL, 3, &TaskHandle_4);

Задача1 и Задача2 имеют самый низкий приоритет, но их нужно выполнить в первую очередь, поскольку Задача 4 состоит из условия, которое зависит от параметров Задачи 1.

Поскольку задача 4 имеет наивысший приоритет, она начинает выполняться немедленно, а через некоторое время выполняется задача 1.

Наименее возможные решения, на мой взгляд:

  • Сделать приоритет Task1 наивысшим, а затем изменить его приоритет на самый низкий.
  • Приостановить текущую задачу и запустить задачу 1, затем возобновить задачу

Как мне запустить Task1 перед Task4?

Ответы [ 3 ]

2 голосов
/ 15 мая 2019

Два варианта, которые я могу придумать:

  • Позвоните vTaskSuspend() в начале Task4, возобновите его с Task1, если данное условие выполнено
  • Блок Task4 на семафоре в начале его функции задачи, установите семафор с Task1
1 голос
/ 15 мая 2019

Возможно, после создания задачи 1 и запуска ее кода можно создать задачу 4 после выполнения всех необходимых условий, вместо создания задачи 4 с самого начала

0 голосов
/ 15 мая 2019

Если эти задачи создаются в main (), я полагаю, что вы можете приостановить задачи с более высоким приоритетом до запуска планировщика: https://www.freertos.org/a00130.html, а затем возобновить их после того, как другие задачи выполнят то, что им нужно.

...