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


CONTEXT(). Однако для других платформ  имя макроса будет иным, например, для ми- кроконтроллеров AVR это будет taskYIELD()



Pdf көрінісі
бет64/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   60   61   62   63   64   65   66   67   ...   129
Kurniz

CONTEXT()Однако для других платформ 
имя макроса будет иным, например, для ми-
кроконтроллеров AVR это будет taskYIELD()
для ARM7 — portYIELD_FROM_ISR(). Узнать 
точное имя макроса можно из демонстраци-
онного проекта для конкретной платформы.
Переключение между задачами в учебной 
программе № 1 приведено на рис. 5.
Б
óльшую часть времени ни одна задача 
не выполняется (бездействие), но каждые 0,5 с 
управление получает периодическая задача 
(1). Она выводит первое сообщение на экран 
и принудительно вызывает прерывание, об-
рис. 4. Результаты выполнения учебной программы № 1
рис. 5. Последовательность выполнения задач в учебной программе № 1
рис. 6. Результаты выполнения учебной программы № 1 при отсутствии принудительного переключения контекста


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

вследствие него — прерывание микро-
контроллера.
Выполняется обработчик прерывания, 

который отдает семафор и разблокирует 
таким образом задачу — обработчик пре-
рывания.
Задача-обработчик начинает выполняться, 

как только завершит выполнение обработ-
чик прерывания. Первое, что она делает, — 
захватывает семафор.
Задача-обработчик обслуживает событие, 

связанное с прерыванием, после чего пыта-
ется снова захватить семафор и переходит 
в блокированное состояние, пока семафор 
снова не станет доступен.


Достарыңызбен бөлісу:
1   ...   60   61   62   63   64   65   66   67   ...   129




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

    Басты бет