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





В МК AVR имеются следующие разновидности режимов энергосбережения. В Idle mode (режиме ожидания) останавливается GPU (а также устройство управления выборкой команд из памяти). Все периферийные устройства — таймеры, АЦП, порты— продолжают функционировать. Поэтому значительной экономии не получается: потребление снижается лишь на 30-50%. Очевидно, что режим Idle имеет смысл использовать тогда, когда общее потребление устройства лимитируется именно МК, который при этом обязательно должен находиться в состоянии постоянной готовности. Во всех остальных случаях следует выбирать режимы "глубокого" энергосбережения, когда собственное потребление МК снижается до единиц или десятков микроампер.

К таким режимам относится, в первую очередь, общий для всех моделей Power Down mode. В нем останавливаются все узлы МК, за исключением сторожевого таймера (если он включен), системы обработки внешних асинхронных прерываний и модуля TWI. Соответственно, выход из этого режима возможен либо по сбросу МК (в том числе и от сторожевого таймера), либо от прерывания TWI (см. главу 12), либо от внешнего прерывания (причем только того, которое обнаруживается асинхронно, см. раздел "Прерывания" этой главы). В роли "будящего" устройства может выступать и модуль универсального последовательного интерфейса USI (в тех моделях, в которых он заменяет TWI). Потребление в этом режиме может составить до нескольких десятков микроампер. Важная особенность Power Down mode — то, что в этом режиме останавливается тактовый генератор.
Это означает, что при выходе из спящего режима тактовый генератор потратит время на "раскрутку", причем этот интервал будет тем же самым, что задается конфигурационными ячейками SUTI. .0 для задержки сброса (см. раздел "Сброс" в главе 2). По умолчанию оно составляет 16 384 такта (около 4 мс при тактовой частоте 4 МГц), что следует учитывать при разработке программы; при необходимости это время для случая кварцевого резонатора можно сократить до 1024 тактов установкой при программировании кристалла ячейки CKSELO в состояние лог. 0. Если это время критично, то применение ЛС-генератора или тактирование от внешнего источника (при соответствующей установке ячеек CKSEL3..I, СМ. табл. 2.1) позволяет сократить время выхода на режим до минимума, когда задержка составит всего 6 тактов (+ 8 тактов на переход к выполнению "разбудившего" прерывания). Установка ячеек CKSELO И SUTI. .0 при этом не имеет значения.

Power Save mode отличается от Power Down тем, что если в МК имеется таймер, могущий работать в асинхронном режиме от отдельного тактового генератора (см. раздел "Таймеры-счетчики" в главе 3), и этот таймер включен, то он продолжит работу и в этом режиме. Это несколько увеличивает потребление, зато выход из режима Power Save возможен по прерываниям от таймера-счетчика. Практически это удобно при реализации часов реального времени. Standby mode отличается от Power Down тем, что в этом режиме продолжает работать тактовый генератор (только при установке внешнего резонатора). Режим полезен тем, что позволяет выходить из "спящего" состояния всего за 6 тактов. В некоторых моделях есть еще режим Extended Standby, который объединяет в себе Standby и Power Save. Подробнее о программировании режимов энергосбережения см. главу 14.

ЧАСТЬ II
ГЛАВА 5
Общие принципы программирования МК семейства AVR
Любой язык программирования — всего лишь инструмент. Как и во всех остальных случаях, инструмент может быть удобным или неудобным. А если точнее, то неудобных инструментов не бывает: существуют лишь такие, которые лучше подходят для одних задач, а для других не годятся, которые одним людям нравятся, других отталкивают. Наконец, есть более универсальные, а есть — "заточенные" под конкретную область деятельности. В принципе каждый алгоритм можно реализовать на любом языке программирования. Мой знакомый — владелец программистской фирмы — рассказывал, что они пишут свои программы частью на С, частью на Delphi, частью на ассемблере, используя эти инструменты в тех областях, где они более всего подходят. Для микроконтроллеров предлагается выбор, по сути, только из двух вариантов — ассемблер или С. Давайте немного подробнее обсудим, какой из этих инструментов для чего больше приспособлен.

Ассемблер или С?
Ассемблер — это не универсальный язык программирования, подобно С или Pascal, а просто несколько (не очень много) правил, по которым последовательность команд процессора, записанных в мнемоническом виде, может объединяться в программу. Программа сначала получается в текстовом формате (ее еще называют "исходным текстом", "исходным кодом", или просто "исходником"). Этот формат должен представлять собой "чистый текст" в однобайтовой кодировке, никакие другие форматы (вроде MS Word) тут не проходят категорически.
Эту программу потом компилируют с помощью собственно ассемблера (assembler— сборщик)— так называется программа, которая переводит текст с мнемоническими обозначениями в последовательность команд и данных, записанных уже в двоичной форме, и пригодную для загрузки в память контроллера. В принципе операция компиляции (иногда ее в данном случае еще называют ассемблированием) лишняя и служит только для удобства человеческого восприятия исходного текста программ. Когда-то программы писали прямо в двоичных кодах— говорят, Джон фон Нейман, знаменитый математик и ведущий теоретик "компьютеростроения", делал это блестяще и долго ругался на появившийся тогда первый язык высокого уровня Fortran за профанацию идеи ("это же отходы научной деятельности для канцеляристов!").
Но программировать прямо в машинных кодах не только крайне неудобно, но еще и очень долго, особенно при поиске ошибок и отладке. Потому и придумали мнемонические обозначения для команд (для каждого процессора, вообще говоря, свои) и несколько несложных правил нотации (т. е. оформления текста программ, также в общем случае своих для каждой системы, но в целом похожих), чтобы программа-ассемблер "понимала" текст правильно.



     
 

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