Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 3. Периферийные устройства и прерывания 63 общие свойства прерываний МК АVR и различные варианты общей идеологии их использования . Событиями, на которые нужно реагировать, мoryr быть сигналы от других уст­ ройств, как посылаемые автоматически, так и обусловленные действиями пользо­ вателя . Moryr такие сигналы возникать и внутри контроллера, как следствие рабо­ ты его внутренних узлов. Как можно обнаружить и обработать такие события? Наиболее универсальный способ, который применяется в системах всех уров­ ней,- организация основной программы в виде бесконечного цикла. Внутри этого цикла тем или иным способом отслеживается возникновение неких событий. Такой цикл, например, представляет собой почти любая Windows-пpoгpaммa (как и Windows в целом) . Но организация реакции на события внутри такого цикла в Windows - отдельная и весьма сложная тема, а в МК все может быть сделано просто и прозрачно: при наступлении события устанавливается определенное зна­ чение некоей переменной, часто именуемой флагом (в простейшем случае это мо­ жет быть один бит в специально отведенном регистре или в ячейке памяти или да­ же просто состояние вывода МК, задаваемое извне - например, нажатием кнопки). Основная программа в цикле последовательно проверяет значение всех необходи­ мых флагов, регистров или выводов и при изменении какого-либо из них переходит к соответствующей процедуре (подпрограмме) обработки события . Раньше, когда еще никаких встроенных прерываний в микропроцессорах не бьmо, только так всегда и поступали (пример такой простейшей программы приведен в главе 6). Ориентирует на подобную организацию работы и Arduino (по крайней мере, на начальном этапе). Логика такой линейно выполняющейся программы по­ нятна даже полному чайнику, кроме того, она проста в отладке, хоть элементарны­ ми методами, хоть с применением специальных отладочных сред. В качестве альтернативы такому «ручному» способу отслеживания событий и были придуманы прерывания ( inteпupts) . «Ручной» способ во многих отношениях неудо­ бен: во-первых, события мoryr требовать безотлагательного внимания, а программа бывает при этом занята «своими делами» . Во-вторых, при таком подходе некое со­ бытие нетрудно попросту потерять - во время обработки очередного из них про­ грамма выходит из цикла отслеживания, и до возврата в него может пройти доста­ точно много времени, когда условия для наступления следующего события уже ис­ чезнут. Если при этом первое по порядку отслеживания событие происходит весьма часто и требует много времени на обработку, то не исключена ситуация, когда ко всем остальным программа попросту не успеет перейти или будет их отслеживать выборочно, - многим пользователям Windows знакома такая ситуация, когда не­ кая программа, выполняя громоздкие процедуры вроде записи больших массивов информации на флешку, просто «вешает» все остальные программы, не давая сис­ теме даже отслеживать перемещение мыши. Использование аппаратных прерываний позволяет полностью избежать подобных ситуаций, если нагрузка на МК не превышает его возможностей, и сгладить по­ следствия в случае, когда в отдельные моменты времени нагрузка на МК его воз­ можности все-таки превысила. По сути аппаратные прерывания организуются так же, как и «ручное» обнаружение, - в цикле: при возникновении условий для пре-

RkJQdWJsaXNoZXIy MTExODQxMg==