Читаем Программируем Arduino полностью

#if defined(USBCON)

    USBDevice.attach();

#endif

являются еще одной директивой препроцессора C. Данный код действует подобно команде if, которую вы можете использовать в своих скетчах, но выполняется она не тогда, когда скетч уже работает в Arduino. Проверка условия в директиве #if происходит во время компиляции скетча. Данная директива дает отличную возможность включать и выключать фрагменты кода в зависимости от конкретного типа платы. В данном случае, если Arduino поддерживает интерфейс USB, в программу включается код, подключающий (инициализирующий) его, в противном случае нет никакого смысла компилировать его.

Из скетча в Arduino

Теперь, когда вы узнали, откуда берется весь этот магический код, когда пишется даже самый простой скетч для Arduino, можно посмотреть, как этот код попадает во флеш-память микроконтроллера на плате Arduino, когда вы щелкаете на кнопке Upload (Загрузить) в Arduino IDE.

На рис. 2.4 показано, что происходит после щелчка на кнопке Upload (Загрузить).

Рис. 2.4. Комплект инструментов Arduino

Скетчи для Arduino хранятся в виде текстовых файлов с расширением .ino в папке с тем же именем, но без расширения.

Когда пользователь пытается выгрузить скетч в плату, в дело включается среда разработки Arduino IDE, которая управляет множеством вспомогательных программ, выполняющих основную работу. Сначала компонент Arduino IDE, который я (за неимением лучшего названия) называю препроцессором (Arduino IDE preprocessor), собирает файлы, составляющие скетч. Обратите внимание на то, что обычно скетч состоит из единственного файла. При желании в папку скетча можно добавить другие файлы, правда, при этом для их создания придется использовать другой редактор.

Если в папке присутствуют другие файлы, они также будут включены в процесс сборки. Файлы с программным кодом на языках C и C++ компилируются отдельно друг от друга. В начало главного файла скетча добавляется строка, подключающая arduino.h.

Так как существует множество разных моделей плат Arduino, использующих разные микроконтроллеры с разными наименованиями контактов, Arduino IDE должна выбрать правильные их определения. Если заглянуть в папку hard-ware/arduino/variants, можно увидеть отдельные папки для всех моделей плат Arduino, в каждой из которых хранится свой файл pins_arduino.h. Этот файл содержит имена контактов для своей платформы.

После объединения файлов вызывается компилятор GCC. Это компилятор C++, распространяемый с открытым исходным кодом и входящий в состав дистрибутива Arduino. Он принимает скетч, заголовочный файл и файлы реализации с исходным кодом на C и преобразует их в код, который может выполняться микроконтроллером на плате Arduino. Этот компилятор выполняет следующие шаги.

1. Препроцессор интерпретирует все команды #if и #define и определяет, какой код должен быть скомпилирован.

2. Затем выполняются компиляция и компоновка кода в единственный файл, пригодный для выполнения процессором на плате.

3. Когда компилятор завершит свою работу, запускается открытый программный компонент с названием avrdude, который пересылает в плату выполняемый двоичный код в шестнадцатеричном формате через последовательный интерфейс USB.

Теперь мы в царстве Arduino. В плате Arduino имеется небольшая резидентная программа, устанавливаемая в каждый микроконтроллер. Эта программа называется загрузчиком (bootloader). Загрузчик выполняется каждый раз, когда происходит сброс платы Arduino. Именно поэтому, когда происходит передача данных по последовательному интерфейсу, аппаратура связи в Arduino Uno производит принудительный сброс платы, чтобы дать загрузчику возможность проверить входящие скетчи.

Если был получен скетч, плата Arduino программирует сама себя, распаковывая шестнадцатеричное представление программы в двоичное и сохраняя его во флеш-памяти. Когда в следующий раз произойдет сброс платы, после обычной проверки на наличие нового скетча загрузчик автоматически запустит программу, хранящуюся во флеш-памяти.

Возникает естественный вопрос: почему компьютер не может запрограммировать микроконтроллер напрямую, минуя такую сложную процедуру? Причина в том, что для программирования микроконтроллера требуется специальная аппаратура, использующая другой способ связи с платой Arduino (кто-нибудь из вас спрашивал себя, зачем на плате колодка с шестью контактами?). Благодаря загрузчику, постоянно прослушивающему последовательный порт, мы можем программировать Arduino через USB без использования специальной аппаратуры.

Однако если у вас есть такой программатор, например AVRISPv2, AVRDragon или USBtinyISP, с его помощью вы сможете программировать Arduino напрямую, в обход загрузчика. Фактически, как будет показано далее в этой главе, в роли такого программатора можно использовать вторую плату Arduino.

AVR Studio

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных