Выбрать главу

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

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

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

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

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

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

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

AVR Studio

Тертые инженеры-электронщики могут выразить свое презрение к Arduino IDE, заявив, что она не имеет никаких преимуществ перед инструментами компании Atmel для программирования всего семейства микроконтроллеров AVR. С технической точки зрения это верно. Но при этом не учитывается, что Arduino помогает раскрыть все тайны процесса использования микроконтроллеров и выйти из-под контроля таких экспертов. Действительно, многое из того, что делает нас поклонниками Arduino, можно считать дилетантством, и в ответ на это я могу только сказать: «Ну и что!»

AVR Studio — это лицензионное программное обеспечение, предоставляемое производителем для программирования микроконтроллеров, на основе которых сконструированы платы Arduino. Его можно использовать вместо Arduino IDE. Однако в этом случае вам придется смириться со следующими ограничениями.

• Работа возможна только в окружении Windows.

• Программирование выполняется с использованием специального оборудования вместо USB.

• Среда разработки сложнее в использовании.

Возможно, вам захочется узнать, почему может возникнуть желание использовать эту среду. Вот некоторые веские причины.

• Чтобы избавиться от загрузчика (в модели Uno он занимает 500 байт), например из-за нехватки флеш-памяти или желания обеспечить более быстрый запуск программы после сброса.

• Чтобы использовать микроконтроллеры, отличные от тех, что применяются в стандартных платах Arduino, например маленькие и недорогие микроконтроллеры семейства ATtiny.

• Просто чтобы освоить что-то новое.

Все платы Arduino снабжаются колодкой с шестью контактами, которые можно использовать для непосредственного программирования Arduino с применением AVR Studio. Фактически некоторые модели имеют две такие колодки: одна связана с основным процессором, а другая — с интерфейсом USB, поэтому будьте внимательнее при выборе нужной.

На рис. 2.5 показано, как выглядит пользовательский интерфейс программы AVR Studio 4.

Изучение AVR Studio выходит за рамки этой книги. Однако, как можно видеть на рис. 2.5, скетч Blink не стал длиннее, но определенно выглядит намного сложнее! И в результате его компиляции выполняемый код занимает намного меньше места во флеш-памяти в сравнении с его аналогом в Arduino.

На рис. 2.6 изображена плата Arduino, подключенная к программатору AVR Dragon. Это очень гибкое и мощное устройство, позволяющее в пошаговом режиме отлаживать программы, фактически выполняющиеся на микроконтроллере ATmega.