27
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 7 '2011
www.kite.ru
микроконтроллеры
работчик которого начинает выполняться
сразу же (2). Обработчик прерывания отда-
ет семафор, поэтому разблокируется задача-
обработчик, которая ожидала возможности
захватить этот семафор. Приоритет у задачи-
обработчика выше, чем у периодической за-
дачи, поэтому благодаря принудительному
переключению контекста задача-обработчик
получает управление (3). Задача-обработчик
выводит свое сообщение на дисплей и пы-
тается снова захватить семафор, который
уже недоступен, поэтому она блокируется.
Управление снова получает низкоприоритет-
ная периодическая задача (4). Она выводит
второе свое сообщение на дисплей и блокиру-
ется на время 0,5 с. Система снова переходит
в состояние бездействия.
Если не выполнять принудительного пе-
реключения контекста, то есть исключить
из программы строку:
portSWITCH_CONTEXT();
то можно наблюдать описанный ранее эф-
фект (рис. 6).
В этом случае можно видеть, что сообще-
ния, выводимые низкоприоритетной пе-
риодической задачей, следуют друг за дру-
гом, то есть высокоприоритетная задача-
обработчик не получает управления сразу
после того, как обработчик прерывания от-
дает семафор.
Подведя итоги, можно представить такую
последовательность действий при отложен-
ной обработке прерываний с помощью дво-
ичного семафора:
Происходит
событие внешнего мира,
•
вследствие него — прерывание микро-
контроллера.
Выполняется обработчик прерывания,
•
который отдает семафор и разблокирует
таким образом задачу — обработчик пре-
рывания.
Задача-обработчик начинает выполняться,
•
как только завершит выполнение обработ-
чик прерывания. Первое, что она делает, —
захватывает семафор.
Задача-обработчик обслуживает событие,
•
связанное с прерыванием, после чего пыта-
ется снова захватить семафор и переходит
в блокированное состояние, пока семафор
снова не станет доступен.
Достарыңызбен бөлісу: