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