Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет22/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   18   19   20   21   22   23   24   25   ...   129
Kurniz

Приоритеты задач
В предыдущей статье [1] читатель познакомился с механизмом 
приоритетов задач. Далее будет показано, как значение приоритета 
влияет на выполнение задачи.
При создании задачи ей назначается приоритет. Приоритет за-
дается с помощью параметра uxPriority функции xTaskCreate()
Максимальное количество возможных приоритетов определяется 
макроопределением configMAX_PRIORITIES в заголовочном файле 
FreeRTOSConfig.h. В целях экономии ОЗУ необходимо задавать наи-
меньшее, но достаточное значение configMAX_PRIORITIES. Нулевое 
значение приоритета соответствует наиболее низкому приоритету, 
значение (configMAX_PRIORITIES-1) — наиболее высокому (в ОС 
семейства Windows наоборот — приоритет 0 наивысший).
Планировщик гарантирует, что среди всех задач, находящихся в со-
стоянии готовности к выполнению, перейдет в состояние выполнения 
та задача, которая имеет наивысший приоритет. Если в программе соз-
даны несколько задач с одинаковым приоритетом, то они будут вы-
полняться в режиме разделения времени [1]. То есть задача выполняется 
в течение системного кванта времени, после чего планировщик перево-
дит ее в состояние готовности и запускает следующую задачу с таким же 
приоритетом, и далее по кругу. Таким образом, задача выполняется 
за один квант времени и находится в состоянии готовности к выполне-
нию (но не выполняется) в течение стольких квантов времени, сколько 
имеется готовых к выполнению задач с таким же приоритетом.
На рис. 7 показано, как задачи разделяют процессорное вре-
мя в учебной программе № 1. Кроме хода выполнения двух задач, 
на рис. 7 показано выполнение кода планировщика каждый систем-
ный квант времени. Выполнение кода планировщика приводит к пе-
реключению на следующую задачу с одинаковым приоритетом.
Модифицируем учебную программу № 1 так, чтобы задачам на-
значался разный приоритет. Пусть Задача 2 получит приоритет, 
равный 2, а приоритет Задачи 1 останется прежним — равным 1. 
Для этого следует отредактировать вызов API-функции xTaskCreate() 
для создания Задачи 2:

xTaskCreate( vTask, ( signed char * ) “Task2”, configMINIMAL_STACK_SIZE, (void*)&xTP2, 2, NULL );

Выполнив сборку модифицированной учебной программы и за-
пустив ее на выполнение, можно наблюдать ситуацию, когда все время 
будет выполняться Задача 2, а Задача 1 никогда не получит управление 
(рис. 8).
Задача 2, как и Задача 1, все время находится в состоянии готовно-
сти к выполнению. За счет того, что Задача 2 имеет приоритет выше, 
чем Задача 1, каждый квант времени планировщик будет отдавать 
управление именно ей, а Задача 1 никогда не получит процессорного 
времени (рис. 9).
Этот пример показывает необходимость пользоваться приорите-
тами осмотрительно, так как никакого алгоритма старения в плани-
ровщике не предусмотрено (как в ОС общего назначения). Поэтому 


Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет