Литмир - Электронная Библиотека
Содержание  
A
A

Если в папке присутствуют другие файлы, они также будут включены в процесс сборки. Файлы с программным кодом на языках 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

Тертые инженеры-электронщики могут выразить свое презрение к 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.

В главе 4 мы рассмотрим непосредственное взаимодействие с портами, реализацию которого можно видеть на рис. 2.5. Этот прием позволяет улучшить производительность ввода/вывода и продолжать пользоваться преимуществами Arduino IDE.

Программируем Arduino. Основы работы со скетчами - _24.jpg

Рис. 2.5. AVR Studio

Программируем Arduino. Основы работы со скетчами - _25.jpg

Рис. 2.6. Плата Arduino, подключенная к программатору AVR Dragon

Установка загрузчика

Установка загрузчика в плату Arduino может потребоваться по нескольким причинам. Например, вы могли по неосторожности повредить извлекаемый микроконтроллер ATmega328 на плате Arduino Uno и решили заменить его новым ATmega328, приобретенным без загрузчика. Или, занимаясь собственными разработками, вы решили взять микроконтроллер ATmega328 из платы Arduino и вставить его в плату собственной конструкции.

В любом случае имеется возможность установить загрузчик в «чистый» микроконтроллер ATmega328, используя любой из программаторов, упоминавшихся в предыдущем разделе, или с помощью второй платы Arduino.

Установка загрузчика с помощью AVR Studio и программатора

В папке установки Arduino IDE имеются шестнадцатеричные файлы загрузчиков, которые можно записать в ATmega328 с помощью AVR Studio. Эти файлы находятся в папке hardware/arduino/bootloaders. Там вы найдете шестнадцатеричные файлы для всех видов микроконтроллеров. Если вам требуется установить загрузчик в модель Uno, используйте optiboot_atmega328.hex в папке optiboot (рис. 2.7).

Но имейте в виду следующее: при установке загрузчика есть вероятность того, что ваш микроконтроллер превратится в «кирпич». Микроконтроллеры имеют то, что называют битами защиты, которые можно неправильно запрограммировать без возможности восстановления. Они встраиваются для защиты коммерческих интересов, чтобы предотвратить возможность перепрограммирования. Прежде чем сделать решающий шаг, проверьте внимательно, что биты защиты установлены правильно для той платы Arduino, которую вы собираетесь запрограммировать, и подготовьтесь к худшему. На форуме Arduino (www.arduino.cc/forum)7 вы найдете множество обсуждений этой темы наряду с советами, как избежать неприятностей.

11
{"b":"566417","o":1}