Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





ГЛАВА 4
Прерывания и режимы энергосбережения
Возможность аппаратно прерывать выполнение основной программы — важнейшая функция современных микроконтроллеров. Напомним, что в архитектуре IBM PC прерывания осуществляет специальный контроллер прерываний, в МК же, в полном соответствии с концепцией "микро-ЭВМ", эта функция является встроенной. Любое из периферийных устройств может вызывать свое прерывание, а чаще всего и не одно. В этой главе мы рассмотрим общие свойства прерываний МК AVR, а также непосредственно связанные с прерываниями функции энергосбережения.

Прерывания
Не будет преувеличением утверждать, что основное занятие почти любого современного вычислительного устройства, от простенького контроллера стиральной машины до "навороченного" ноутбука— ожидание и обработка неких событий. Это могут быть сигналы от других устройств, посылаемые в автоматическом режиме, а также действия пользователя. Как можно обнаружить и обработать такие события?
Наиболее универсальный способ, который применяется в системах всех уровней, — организация основной программы в виде бесконечного цикла. Внутри этого цикла тем или иным способом отслеживается возникновение неких событий — такой цикл, например, представляет собой почти любая Windows-программа (как и Windows в целом). В основе такого способа лежит один и тот же принцип: при наступлении события устанавливается определенное значение некоей переменной, часто именуемой флагом; в простейшем случае это может быть один бит в специально отведенном регистре или в ячейке памяти (или даже непосредственно состояние вывода МК). Основная программа в цикле проверяет значение всех необходимых флагов, и при изменении какого-то из них переходит к соответствующей процедуре обработки события.
Раньше, когда еще никаких встроенных прерываний в микропроцессорах не было, только так и поступали (см. пример простейшей программы в главе 5). И по сей день нередко программист вынужден прибегать к этому способу, и примеры такого подхода мы еще неоднократно встретим.

В качестве альтернативы такому "ручному" способу отслеживания событий и были придуманы прерывания (interrupts). "Ручной" способ во многих отношениях неудобен: во-первых, события могут требовать безотлагательного внимания, а программа бывает при этом занята "своими делами". Во-вторых, при таком подходе некое событие нетрудно попросту потерять: во время обработки очередного из них программа выходит из цикла отслеживания и до возврата в него может пройти достаточно много времени, когда условия для наступления следующего события уже исчезнут. Если при этом первое по порядку отслеживания событие происходит достаточно часто и требует много времени на обработку, то не исключена ситуация, когда ко всем остальным программа попросту не успеет перейти, или будет их отслеживать выборочно (мйогим пользователям Windows знакома такая ситуация, когда некая программа, выполняя громоздкие процедуры вроде записи больших массивов на жесткий диск, просто "вешает" все остальные программы, не успевая даже отслеживать перемещение мыши).



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru