страница на этапе разработки
В данном уроке мы рассмотрим такое понятие как приоритет задач. Каждая задача имеет свой приоритет, чем он выше, тем выше задача в очереди. Так например, если в очереди будет стоять две задачи на выполнение, то вначале выполниться задача с более высоким приоритетом, а уже потом с более низким.
Приоритет можно выставлять как при создании очереди, так и в процессе выполнения программы.
В данном уроке мы будем программно увеличивать и уменьшать приоритет задачи. Причем у нас не будет задержки, что бы передать управление другой очереди. По этом выполняться будет та программа, у которой стоит более высокий приоритет.
Создадим две очереди со вторым приоритетом, что бы было понятно какая программа выполняется мы будем выводим на экран сообщения.
Программный код:
/* USER CODE BEGIN Includes */
#include «stdio.h»
#include
/* USER CODE END Includes */
/* definition and creation of myTask1 */
osThreadDef(myTask1, vTask1, osPriorityIdle, 2, 128);
myTask1Handle = osThreadCreate(osThread(myTask1), NULL);
/* definition and creation of myTask2 */
osThreadDef(myTask2, vTask2, osPriorityIdle, 2, 128);
myTask2Handle = osThreadCreate(osThread(myTask2), NULL);
/* USER CODE BEGIN RTOS_THREADS */
/* USER CODE BEGIN vTask1 */
unsigned portBASE_TYPE uxPriority;
uxPriority = uxTaskPriorityGet(NULL);
volatile unsigned long ul;
/* Infinite loop */
for(;;)
{
printf(» Task1 is running \r\n»);
printf(» Task2 priority + \r\n»);
vTaskPrioritySet(myTask2Handle,(uxPriority+1));
for(ul=0; ul<1000000; ul++){;}
}
/* USER CODE END vTask1 */
/* USER CODE BEGIN vTask2 */
unsigned portBASE_TYPE uxPriority;
uxPriority = uxTaskPriorityGet(NULL);
volatile unsigned long ul;
/* Infinite loop */
for(;;)
{
printf(» Task2 is running \r\n»);
printf(» Task2 priority — \r\n»);
vTaskPrioritySet(myTask2Handle,(uxPriority-1));
for(ul=0; ul<1000000; ul++){;}
}
/* USER CODE END vTask2 */