我正在使用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在Task4之前运行?
答案 0 :(得分:2)
我可以想到的两个选择:
vTaskSuspend()
的开头调用Task4
,在满足给定条件时从Task1
恢复通话Task4
阻止,从Task1
设置信号量答案 1 :(得分:1)
也许一旦创建Task1并运行其代码,就可以在满足所有需要的条件后创建Task4,而不是从头开始创建Task4。
答案 2 :(得分:0)
如果这些任务是在main()中创建的,我相信您可以在启动调度程序之前先挂起优先级较高的任务:https://www.freertos.org/a00130.html,然后在其他任务完成所需的工作后恢复它们。