{
МИКРОКОНТРОЛЛЕРЫ
I
Вопросы
параллельного
програм м ирования
м икроконтроллеров
А л е к с а н д р Ч е р н о м ы р д и н
г. М агнитогорск
E-mail:
П родолжение.
Начало в № 7/2006
Ф О Н О В Ы Й П Р О Ц Е С С
И О Б Р А Б О Т Ч И К И П Р Е Р Ы В А Н И Й
Как было отмечено в статье цикла, посвященной воп-
росам работы с прерываниями, при использовании ме-
ханизма прерываний в системе можно организовать
т.н. фоновый процесс. Во многих случаях он будет со-
стоять из “зацикленной” команды
wait
(или
sip),
но
может выполнять и другую, более сложную работу.
Между тем, в некоторых ситуациях использование
фонового процесса может стать “железной необходи-
мостью”. Это касается работы микроконтроллера с
устройствами, критичными по времени реакции на них.
Например, в той же статье было сказано, что при ра-
боте одного обработчика прерываний другие (маски-
руемые) прерывания ждут своей очереди на обработ-
ку и, когда работа одного обработчика прерывания за-
кончится, вступят в действие другие обработчики. Ска-
занное верно с одной, весьма существенной, оговор-
кой - если это ожидание
не слишком
затянется.
Рассмотрим пример. Предположим, что у нас есть
два обработчика прерываний - от линий порта А и от
линий порта В. Пусть сигнал на линии А[0] изменился,
вызвав тем самым обработчик прерывания от порта
А. Во время работы этого обработчика на линии В[0]
появился,
а затем, со временем, и
пропал
сигнал
(предполагаем, что обработка прерывания от порта А
потребовала
значительных
затрат времени - напри-
мер, умножения или деления каких-либо чисел). В этом
случае после завершения обработчика прерываний от
порта А действительно будет вызван обработчик пре-
рывания от порта В - но что он будет обрабатывать?!
Сигнала, вызвавшего прерывание от порта В,
уже нет,
и определить, какая именно из линий его вызвала,
уже
нельзя
(если только нет возможности запросить до-
полнительную информацию из устройства, подключен-
ного к порту В, или же линия, вызывающая прерыва-
ние, у порта В всего одна)! Потеря сигнала прерыва-
ния, или информации о прерывании, для многих сис-
тем - критическая ошибка.
В этом случае поступают следующим образом. Для
защиты системы от потери прерываний обработчики
прерываний должны быть максимально простыми и ко-
роткими. Как правило, в их функции входит только
ре-
гистрация
самого факта прерывания и сброс сигнала
прерывания в устройстве. А вот
обработка
этого
за-
регистрированного
прерывания в таком случае уже
целиком ложится на фоновый процесс! Разница здесь
заключается в том, что фоновый процесс, в отличие от
обработчика прерываний, может быть в любой момент
прерван (он выполняется с разрешенными прерывани-
ями), поэтому потерь других прерываний в этом слу-
чае не произойдет: во-первых, все обработчики преры-
ваний будут гарантированно быстро получать управле-
ние, а, во-вторых, ни один из обработчиков не будет
захватывать ресурсы микроконтроллера дольше мини-
мально необходимого времени. Одна из возможных
схем взаимодействия обработчиков прерываний и фо-
нового процесса приведена на
рис. 2.
Давайте рассмот-
рим ее более подробно.
Основой схемы взаимодействия является
очередь
сообщений
от обработчиков. Получив прерывание,
обработчик выполняет сброс сигнала прерывания и его
минимальную обработку.
Для портов, например, в
эту минимальную обработку должно входить чтение
текущ его состояния линий порта - ведь к тому време-
ни, когда у ф онового процесса “дойдут руки” до обра-
ботки этого прерывания, состояние линий порта уже
может многократно измениться. После выполнения
вышеуказанных действий обработчик прерывания по-
мещает в очередь сообщение “Было прерывания от
порта” и состояние линий порта. На этом работа об-
работчика
заканчивается.
Фоновый процесс находится в состоянии ожидания
по команде
wait.
После завершения обработки преры-
вания команда wait завершает свою работу, но фоно-
вый процесс на этот раз не “зацикливается”, а прове-
ряет, нет ли в очереди сообщений, ожидающих обра-
ботку. Если такие сообщения есть, фоновый процесс
выполняет
их обработку, и, соответственно,
удаляет
их из очереди. Если в процессе обработки сообщений
возникнут другие прерывания, они не будут потеряны
36 |
| Радиолюбитель - 0 8 /2 0 0 6
предыдущая страница 35 Радиолюбитель 2006-08 читать онлайн следующая страница 37 Радиолюбитель 2006-08 читать онлайн Домой Выключить/включить текст