低优先级任务需要首先启动FreeRTOS

时间:2019-05-15 10:03:19

标签: freertos

我正在使用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);

Task1和Task2的优先级最低,但是由于Task4的条件取决于Task1的参数,因此必须首先执行它们。

由于Task4具有最高优先级,因此它将立即开始执行,并在一段时间后执行Task1。

我认为最不可能的解决方案是:

  • 将Task1的优先级设置为最高,然后将其优先级更改为最低。
  • 暂停当前任务并启动Task1,然后继续任务

如何使Task1在Task4之前运行?

3 个答案:

答案 0 :(得分:2)

我可以想到的两个选择:

  • vTaskSuspend()的开头调用Task4,在满足给定条件时从Task1恢复通话
  • 在其任务功能开始时将信号量Task4阻止,从Task1设置信号量

答案 1 :(得分:1)

也许一旦创建Task1并运行其代码,就可以在满足所有需要的条件后创建Task4,而不是从头开始创建Task4。

答案 2 :(得分:0)

如果这些任务是在main()中创建的,我相信您可以在启动调度程序之前先挂起优先级较高的任务:https://www.freertos.org/a00130.html,然后在其他任务完成所需的工作后恢复它们。