I
МИКРОКОНТРОЛЛЕРЫ
і
В
о
п
р
о
с ы
п
а
р
а
л
л
е
л
ь
н
о
г о
п
р
о
г р
а
м
м
и
р
о
в
а
н
и
я
м
и
к р
о
к о
н
т р
о
л
л
е
р
о
в
МАСКИРУЕМЫЕ И НЕМАСКИРУЕМЫЕ
ПРЕРЫВАНИЯ
Взаимодействие фонового процесса и обработчиков
прерываний - не единственный случай, когда нам при-
ходится сталкиваться с вопросами параллельного про-
граммирования. Другой, намного более частый в прак-
тике случай - применение сторожевого таймера (в ка-
честве второго таймера): ведь прерывания от сторо-
жевого таймера являются немаскируемыми и, следо-
вательно, могут вмешиваться даже в работу других
обработчиков прерываний!
Александр Черномырдин
г. Магнитогорск
E-mail:
Окончание.
Начало в №7-8/2006
Сразу необходимо сказать - хорошего решения этой
проблемы не существует, есть только “не очень пло-
хое”. Первый вариант решения пригоден на тот случай,
если фоновый процесс в системе представляет собой
“зацикленную” команду
wait,
а смысловая часть сис-
темы сосредоточена в обработчиках прерываний. В
этом случае совместная работа обработчика преры-
ваний от сторожевого таймера и остальной части сис-
темы может быть реализована следующим образом:
inti:
bttl
jnz
%d5,0000100b
$ 1
rti
$1:
movl
%d5, OAAh
movl
%d5,Oxxxxxxxb
rti
; <1> В какой момент возникло прерывание?
;
<2>
Оно возникло при работе других обработчиков.
; <3> Оно возникло при выполнении команды wait - обработка
; прерывания.
; <4> Перепрограммировать таймер заново
; для выдачи следующего тика
Необходимые пояснения:
1. При входе в обработчик прерывания от сторожево-
го таймера будем предполагать, что регистр #D содер-
жит адрес 18h. Самым первым шагом мы проверяем, в
каком состоянии находился процессор микроконтролле-
ра при возникновении сигнала прерывания от стороже-
вого таймера. В этом нам поможет бит из регистра со-
стояния сторожевого таймера, о котором вскользь упо-
миналось в статье, посвященной описанию микроконт-
роллера КР1878ВЕ1. Это бит показывает, возникло ли
прерывание при выполнении команды
wait
(или
sip),
либо
при выполнении любой другой команды. Если оно воз-
никло при выполнении команды
wait,
это означает, что
процессор микроконтроллера “прохлаждался”, т.е. ника-
кие другие обработчики прерываний в зто время не ра-
ботали.
2. Бит, описывающий состояние процессора, был ра-
вен лог
.1
- значит, обработчик прерываний от стороже-
вого таймера вмешался в работу других обработчиков! В
этом случае необходимо приостановить его работу до тех
пор, пока другие обработчики не закончат работу. К со-
жалению, в микроконтроллере нет никаких средств для
того, чтобы дождаться завершения других обработчиков,
не загружая при этом процессор микроконтроллера. Ре-
шение здесь состоит в том, чтобы,
не обрабатывая
по-
лученное прерывание,
перезапустить
сторожевой тай-
мер, в надежде, что следующее прерывание от него “по-
падет” на команду
wait.
Подчеркнем еще раз - хорошего
решения этой проблемы нет, но, как показывает практи-
ка, предложенное решение более чем удовлетворитель-
ное: просто в силу характера использования сторожево-
го таймера в программах (например, в качестве “движу-
щей силы” динамической индикации) он обычно вполне
допускает, что некоторые прерывания от него не произ-
ведут желаемого эффекта.
3. Прерывание произошло при выполнении команды
wait.
Можно начинать обработку прерывания - теперь
обработчик никому не помешает и ничью работу не ис-
портит.
4. А это - собственно перезапуск сторожевого тай-
мера.
Вот, по сути дела, как можно решить проблему в слу-
чае, когда фоновый процесс в системе фактически от-
сутствует. Если же фоновый процесс в системе есть, то
это решение, разумеется, неприемлемо. Есть, однако,
вариант решения и в этом случае.
Идея этого варианта заключается в том, что в про-
грамме необходимо искусственным путем
промодели-
ровать
работу механизма прерываний “персонально” для
сторожевого таймера. Для этого в программе, например,
в ячейке 40h, будем использовать, например,- бит 0 (кста-
ти, его с полным правом можно будет назвать
виртуаль-
ным
битом запрета прерываний). Когда обработчики пре-
рываний от любых устройств, отличных от сторожевого
таймера, начинают свою работу, первое, что они должны
-------------------------------------------------------- 1 39
Радиолюбитель - 0 9/2 0 06 1
предыдущая страница 39 Радиолюбитель 2006-09 читать онлайн следующая страница 41 Радиолюбитель 2006-09 читать онлайн Домой Выключить/включить текст