Заметки на полях
Отмечу, что каждый, кто хочет всерьез научиться программировать (неважно для чего, хоть для Веба, хоть для микроконтроллеров), должен начинать с изучения фундаментального труда Д. Кнута [10]. К сожалению, Кнут не практикующий программист, а профессор Стэндфордского университета, и как все профессоры, начинает с анализа, доказательств теорем и тому подобной «чепухи», зачем-то очень нужной математикам. Читатель, конечно, понимает, что в этих высказываниях есть значительная доля шутки, но правда заключается в том, что математик потребует доказательства там, где инженеру достаточно заверения авторитета, что такая-то формула справедлива, а доказательства и обоснования со ссылками на древнегреческих авторов его только отвлекают от главного. И все же я очень советую изучить по крайней мере те главы первого тома, которые посвящены машинным языкам, и алгоритмы арифметических действий из второго тома (всего тома три, но я ссылаюсь только на два, так как третий посвящен исключительно алгоритмам сортировки, которые лежат за пределами любительской программистской практики).
Конечно, продираться через многочисленные математические изыски Кнута необязательна, если вы согласны ограничиться готовыми программными модулями, которые с течением времени научитесь править и подстраивать под свои нужды. Материал в этой книге не рассчитан на «крутых» профессионалов, и для его освоения и повторения приведенных здесь конструкций не надо обладать особыми знаниями. Но после ознакомления с работой Д. Кнута во многих вещах вам будет значительно проще разобраться.
Как программируются микроконтроллеры
В МК AVR встроенная память программ энергонезависимая, и называется «flash-памятью программ», так ее можно отличить от также энергонезависимой памяти для хранения пользовательских данных, которая именуется EEPROM. Если строго следовать терминологии, то flash — это, как вы знаете, разновидность EEPROM, но во всяком случае, встроенная память программ для AVR-контроллеров делается именно по flash-технологии, что позволяет значительно ускорить процесс программирования. Первоначально такое разделение на EEPROM и flash для, по сути дела, одинаковых по функционированию разделов памяти (и то и другое призвано хранить данные при отсутствии питания) приводило еще и к тому, что память программ допускала лишь около 1000 циклов перезаписи, в то время как EEPROM намного больше (порядка 100 000). Так было в семействе Classic и первоначальных выпусках семейств Tuny и Mega. И хотя на практике и того, и другого более чем достаточно, современные МК AVR допускают уже 10 000 циклов перезаписи для памяти программ.
Подробности
Дело в том, что модели из семейства Меда могут самопрограммироваться в процессе эксплуатации (загружать программу из внешних источников), и вот тогда тысячи циклов в теории может оказаться недостаточно. Если вас заинтересовала эта возможность, то имейте в виду, что для самопрограммирования все равно требуется первоначально занести в память программу-загрузчик. Употребляется этот способ тогда, когда контроллер должен выполнять существенно различные функции в зависимости от каких-то условий. В некотором роде это напоминает загрузку различных программ в обычных компьютерах (например, в карманных или в смартфонах). Здесь мы, конечно, разбирать эти подробности не будем.
С другой стороны, со временем разница между памятью программ и пользовательской EEPROM, совершенно очевидно, стирается: так, в семействе Tuny flash-память программируется побайтно, а не страницами, а в старших моделях семейства Mega, наоборот, EEPROM программируется страницами (правда, небольшого размера, всего в 4 байта). Для конечного пользователя все эти нюансы не имеют ровным счетом никакого значения.
Встроенная память программ имеет объем от 1 кбайта у ATtunyll до 128 кбайт у ATmega128 (как вы догадались, число в наименовании модели как раз и означает объем памяти программ). Если у пользователей системы Windows такие объемы вызовут лишь снисходительную улыбку, то советую им не «задаваться», поскольку Андрес Хейлсберг, автор Turbo Pascal, умудрился в первой версии этого продукта (1982) уложить в 33 280 байт интегрированную среду разработки, встроенный редактор и библиотеку времени выполнения. Так что возможностей AVR достаточно, чтобы построить неслабый персональный компьютер, который мог бы существенно превышать по возможностям модели IBM PC АТ на процессоре i286 (напомним, что последний выполнял инструкцию в среднем за 2–4 такта, a AVR — за 1–2). Правда, 1286 мог адресовать до 16 Мбайт динамического ОЗУ (у процессоров для ПК, напомним, нет встроенной памяти, кроме операционных регистров). Но для применений, которые требуют объемного программного кода, и AVR (кроме Tuny) могут выполнять программы из внешней памяти объемом до 4 Мбайт в отдельных моделях, причем скорость выборки команд зависит только от параметров ОЗУ и тактовой частоты AVR. Мы в данной книге эту возможность не рассматриваем — автору еще ни разу не удалось превысить лимит встроенной памяти выбранного МК.
Читать дальше
Конец ознакомительного отрывка
Купить книгу