Заметки на полях
Отмечу, что каждый, кто хочет всерьез научиться программировать (неважно для чего, хоть для Веба, хоть для микроконтроллеров), должен начинать с изучения фундаментального труда Д. Кнута [10]. К сожалению, Кнут не практикующий программист, а профессор Стэндфордского университета, и как все профессоры, начинает с анализа, доказательств теорем и тому подобной «чепухи», зачем-то очень нужной математикам. Читатель, конечно, понимает, что в этих высказываниях есть значительная доля шутки, но правда заключается в том, что математик потребует доказательства там, где инженеру достаточно заверения авторитета, что такая-то формула справедлива, а доказательства и обоснования со ссылками на древнегреческих авторов его только отвлекают от главного. И все же я очень советую изучить по крайней мере те главы первого тома, которые посвящены машинным языкам, и алгоритмы арифметических действий из второго тома (всего тома три, но я ссылаюсь только на два, так как третий посвящен исключительно алгоритмам сортировки, которые лежат за пределами любительской программистской практики).
Конечно, продираться через многочисленные математические изыски Кнута необязательна, если вы согласны ограничиться готовыми программными модулями, которые с течением времени научитесь править и подстраивать под свои нужды. Материал в этой книге не рассчитан на «крутых» профессионалов, и для его освоения и повторения приведенных здесь конструкций не надо обладать особыми знаниями. Но после ознакомления с работой Д. Кнута во многих вещах вам будет значительно проще разобраться.
В МК AVR встроенная память программ энергонезависимая, и называется «flash-памятью программ», так ее можно отличить от также энергонезависимой памяти для хранения пользовательских данных, которая именуется EEPROM. Если строго следовать терминологии, то flash — это, как вы знаете, разновидность EEPROM, но во всяком случае, встроенная память программ для AVR-контроллеров делается именно по flash-технологии, что позволяет значительно ускорить процесс программирования. Первоначально такое разделение на EEPROM и flash для, по сути дела, одинаковых по функционированию разделов памяти (и то и другое призвано хранить данные при отсутствии питания) приводило еще и к тому, что память программ допускала лишь около 1000 циклов перезаписи, в то время как EEPROM намного больше (порядка 100 000). Так было в семействе Classic и первоначальных выпусках семейств Tuny и Mega. И хотя на практике и того, и другого более чем достаточно, современные МК AVR допускают уже 10 000 циклов перезаписи для памяти программ.