Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
10 Введение З АМЕТКИ НА ПОЛЯХ Тут следует еще упомянуть исторический факт, что вообще-то языки высокого уровня, включая С, создавались не для контроллеров гарвардской архитектуры, к которым от- носятся в том числе и AVR. Для архитектуры фон Неймана, на которую они рассчита- ны, принципы составления программ существенно другие (иная парадигма, как гово- рят программисты). Да, с помощью С можно получить код, почти столь же эффектив- ный, как ассемблерный. Но даже в самом идеальном случае эффективность кода на С будет все-таки только «почти» такая же: живой пример этого — практически все про- граммы этой книги, которые при переводе на С дадут код, заведомо медленнее вы- полняющийся и большего объема. Специальный пример сравнения программ на Arduino, «чистом» С и ассемблере мы продемонстрируем в главе 6 . Изучение собственно AVR-ассемблера, в отличие от С, занимает минимум време- ни. Краткое описание от Atmel когда-то занимало ровно 4 странички (сейчас оно существенно раздулось [4], но в основном из-за пояснений в виде примеров кода). Его вариант, переведенный на русский, также дополненный примерами и таблицей основных команд, укладывается в 17 страниц [3]. Не сравнить с многостраничными фолиантами руководств по языку С, правда? А почему так? А потому что в элемен- тарном ассемблере специфических для программирования деталей — раз, два и об- челся. Все остальное — структура контроллера, т. е. чистая электроника. И изучать возможности контроллера, когда все время идет речь об установках тех или иных битов в различных регистрах, в терминах команд ассемблера оказывается намного проще и нагляднее. Мы в этой книге обсудим многие существенные моменты, которые обычно обхо- дятся не только в отношении любительского Arduino, но и часто упускаются из ви- ду профессионалами: как сделать так, чтобы контроллер тратил на операцию ми- нимальное время? Как по максимуму использовать все, что может дать 10-разряд- ный АЦП? Как снизить потребление схемы до оптимального уровня и правильно настроить режим sleep ? И постараемся не забывать, что программирование — это всего лишь такой универсальный способ заставить работать схему по заданному алгоритму, а хорошо работающий прибор — это в первую очередь его схемотех- ника. П ОДРОБНОСТИ При изучении материала этой книги читатель, оценивший компактность и предсказуе- мость ассемблерных программ, но не желающий отказываться от удобств языка С, рано или поздно задаст вопрос: а нельзя ли объединить то и другое в одном проекте? Компилятор AVR-GCC это позволяет делать, как минимум, со стороны проекта на С — вставлять в него ассемблерные фрагменты. Причем вызывать их можно даже двумя способами — см. [9], где описан один из них (а внутри статьи есть ссылка на второй, более распространенный способ). Способы применимы в любой среде программиро- вания, основанной на AVR-GCC, в том числе и в Arduino (правда, лаконичность чисто ассемблерных программ и возможность их составления в любом текстовом редакторе вы при этом теряете). Обратной возможности — использования C-библиотек в ас- семблерном тексте, как это позволяют «большие» ассемблеры для ПК (см. [13]), AVR- ассемблер, к сожалению, не предоставляет. За базовый контроллер мы возьмем традиционный ATmega8 — упрощенную вер- сию ардуиновского ATmega328, которая, однако, умеет почти все то же самое. Две другие базовые модели, программы для которых приведены в этой книге:
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==