23
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 7 '2011
www.kite.ru
микроконтроллеры
Андрей Курниц
kurnits@stim.by
Введение
Шестая часть статьи посвящена взаимо-
действию прерываний с остальной частью
программы и поможет читателям ответить
на следующие вопросы:
1) Какие API-функции и макросы можно ис-
пользовать внутри обработчиков преры-
ваний?
2) Как реализовать отложенную обработку
прерываний?
3) Как создавать и использовать двоичные
и счетные семафоры?
4) Как использовать очереди для передачи
информации в обработчик прерывания
и из него?
5) Каковы особенности обработки вложен-
ных прерываний во FreeRTOS?
События и прерывания
Встраиваемые микроконтроллерные си-
стемы функционируют, отвечая действиями
на события внешнего мира. Например, полу-
чение Ethernet-пакета (событие) требует обра-
ботки в задаче, которая реализует TCP/IP-стек
(действие). Обычно встраиваемые системы
обслуживают события, которые приходят
от множества источников, причем каждое со-
бытие имеет свое требование по времени ре-
акции системы и расходам времени на его об-
работку.
При разработке встраиваемой
микроконтроллерной системы необходимо
подобрать свою стратегию реализации обслу-
живания событий внешнего мира. При этом
перед разработчиком возникает ряд вопросов:
1) Каким образом события будут регистриро-
ваться? Обычно применяют прерывания,
однако возможен и опрос состояния вы-
водов микроконтроллера.
2) В случае использования прерываний необ-
ходимо решить, какую часть программного
кода, реализующего обработку события, по-
местить внутри обработчика прерывания,
а какую — вне обработчика. Обычно стара-
ются сократить размер обработчика преры-
вания
настолько, насколько это возможно.
3) Как обработчики прерываний связаны
с остальным кодом и как организовать
программу,
чтобы обеспечить наибы-
стрейшую обработку асинхронных собы-
тий внешнего мира?
FreeRTOS не предъявляет никаких требо-
ваний к организации обработки событий,
однако предоставляет удобные возможности
для такой организации.
Прерывание (interrupt) — это событие
(сигнал), заставляющее микроконтроллер
изменить текущий порядок исполнения ко-
манд. При этом выполнение текущей после-
довательности команд приостанавливается,
и управление передается обработчику пре-
рывания — подпрограмме, которую можно
представить функцией языка Си. Обработчик
прерывания реагирует на событие и обслу-
живает его, после чего возвращает управле-
ние в прерванный код [6]. Прерывания ини-
циируются периферией микроконтроллера,
например прерывание от таймера/счетчика
или изменение логического уровня на выво-
де микроконтроллера.
Следует заметить, что во FreeRTOS все
API-функции и макросы, имена которых
заканчиваются на FromISR или FROM_ISR,
предназначены для использования в обра-
ботчиках прерываний и должны вызываться
только внутри них.
Достарыңызбен бөлісу: