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


События как способ управления выполнением задач



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

События как способ управления выполнением задач
В учебных программах, приведенных выше, задачи были реали-
зованы так, что они постоянно нуждались в процессорном времени. 
Даже когда задача ничего не выводила на экран, она занималась от-
счетом времени с помощью пустого цикла for.
Такая реализация задачи целесообразна только при назначении за-
даче самого низкого приоритета. В противном случае наличие такой 
постоянно готовой к выполнению задачи с довольно высоким прио-
ритетом приведет к тому, что другие задачи, имеющие более низкий 
приоритет, никогда не будут выполняться.
Гораздо эффективнее управлять выполнением задач с помощью 
событий. Управляемая событием задача выполняется только после 
того, как некоторое событие произошло. Если событие не произошло 
и задача ожидает его наступления, то она НЕ находится в состоя-
нии ГОТОВНОСТИ к выполнению, а следовательно, не может быть 
выполнена планировщиком. Планировщик распределяет процес-
сорное время только между задачами, ГОТОВЫМИ к выполнению. 
Таким образом, если высокоприоритетная задача ожидает наступле-
ния некоторого события, то есть не находится в состоянии готов-
ности к выполнению, то планировщик отдаст управление готовой 
к выполнению более низкоприоритетной задаче.
Таким образом, применение событий для управления ходом выпол-
нения задач позволяет создавать программы с множеством различных 
приоритетов задач, и программист может не опасаться того, что высо-
коприоритетная задача «заберет» себе все процессорное время.
Блокированное состояние задачи
Если задача ожидает наступления события, то она находится в бло-
кированном состоянии (рис. 5 в КиТ № 3`2011, стр. 111). Во FreeRTOS 
существуют два вида событий:
1. Временное событие — это событие, связанное с истечением вре-
менного промежутка или наступлением определенного момента 
абсолютного времени. Например, задача может войти в блокиро-
ванное состояние, пока не пройдет 10 мс.
2. Событие синхронизации (внешнее по отношению к задаче) — это 
событие, которое генерируется в другой задаче или в теле обра-
ботчика прерывания МК. Например, задача блокирована, когда 
ожидает появления данных в очереди. Данные в очередь поступают 
от другой задачи.
События синхронизации могут быть связаны с множеством объек-
тов ядра, такими как очереди, двоичные и счетные семафоры, рекур-
сивные семафоры и мьютексы, которые будут описаны в дальнейших 
публикациях.
Во FreeRTOS есть возможность заблокировать задачу, заставив ее 
ожидать события синхронизации, но определить при этом тайм-аут 
ожидания. То есть выход задачи из блокированного состояния возмо-
жен как при наступлении события синхронизации, так и по проше-
ствии времени тайм-аута, если событие синхронизации так и не про-
изошло. Например, задача ожидает появления данных из очереди. 
Тайм-аут при этом установлен равным 10 мс. В этом случае выход 
задачи из блокированного состояния возможен при выполнении 
двух условий:
Данные в очередь поступили.

Данные не поступили, но вышло время тайм-аута, равное 10 мс.



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




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

    Басты бет