Использование MS Visual Studio IDE для программирования AVR/Arduino
Добавил(а) microsin
Я не очень большой фанат компании Microsoft, однако следует признать, что они сделали действительно потрясающую среду разработки Visual Studio. Особенно мне нравится в Visual Studio фича intellisense, которая автоматически дает подсказки по именам членов классов, функциям и полям структур, и для проектов AVR большого размера действительно предпочтительнее использовать Visual Studio IDE в сравнении с простым текстовым редактором.
Здесь приведена краткая инструкция (перевод статьи [1]) - как настроить среду Visual Studio 2008/2010 для использования тулчейна WinAVR и компилирования Ваших программ AVR для получения файлов в формате Intel Hex [2] (прошивка кода firmware микроконтроллера). Этот формат подходит для загрузки программы в память AVR/Arduino с использованием AVRDUDE и/или другого Вашего программатора (например, USBasp, AVRISP-mkII, JTAGICE mkII [3]).
Примечание: предполагается, что у Вас уже установлены тулчейн AVR GCC (в составе пакета WinAVR или Atmel Studio), и конечно же среда разработки Microsoft Visual Studio.
[Шаг 1. Создание Makefile-проекта]
Запустите Visual Studio, зайдите в меню Файл -> Создать -> Проект..., выберите раздел Установленные шаблоны -> Visual C++ -> Проект, использующий makefile:
Введите имя проекта (Имя:), выберите папку, где будет расположен каталог проекта (Расположение:), уберите галочку "Создать каталог для решения", кликните OK.
Запустится мастер настройки проекта (см. скриншоты).
Настройте в окне "Параметры конфигурации отладки" следующие опции:
1. Командная строка построения: make
2. Команды очистки: make clean
3. Командная строка перестроения: make all
Примечание: можно ввести список команд, по одной в строке списка. В качестве команды перестроения здесь введены 2 команды, которые будут выполнены друг за другом:
make clean
make
4. Вывод (для отладки): имя для выходного файла прошивки. Обязательно укажите расширение файла *.hex (GenericHID.hex, к примеру).
5. Путь поиска включений: %AVR32_HOME%\avr\include
Примечание: здесь %AVR32_HOME% это переменная окружения, в которой задан каталог установки WinAVR (например, C:\WinAVR-20100110) или тулчейна из Atmel Studio (например, c:\Program Files\Atmel\AVR Tools\AVR Toolchain). Вместо переменной окружения можно указать просто реальный путь до тулчейна.
Кликните Далее. В окне "Параметры конфигурации выпуска" поставьте галочку "Как в конфигурации отладки". Кликните Готово.
[Шаг 2. Сконфигурируйте проект]
Среда Visual Studio автоматически создала для Вас пустой makefile-проект. Теперь его нужно немного настроить, чтобы можно было начать писать программу для AVR.
Сделайте правый клик на названии проекта (myAVRproj) в дереве Обозревателя решений, и выберите в контекстном меню Свойства. Откроется окно редактирования свойств проекта с активной конфигурацией Debug.
В разделе Свойства конфигурации -> Общие из выпадающего списка "Поддержка общеязыковой среды выполнения (CLR)" (Common Language Runtime Support (/clr)) выберите вариант Поддержка общеязыковой среды выполнения (CLR). Включение этой опции предоставляет изящную поддержку со стороны Intellisense.
Перейдите в раздел Свойства конфигурации -> NMake и убедитесь, что введенные здесь значения соответствуют необходимым командам make для сборки, очистки и перестроения (часто проекты поставляются с готовым Makefile, и команды в них могут отличаться). Также проверьте имя выходного hex-файла и убедитесь, что пути поиска включаемых файлов соответствуют ожидаемым или добавлены в соответствующие поле ввода. В строке ввода может быть несколько путей поиска, отделенных друг от друга точкой с запятой ';'. Если что-то не так, то исправьте.
[Шаг 3. Создание и добавление Makefile]
Создайте файл Makefile для проекта, как Вы это обычно делаете. Лично я предпочитаю использовать готовые Makefile, которые генерирует система AVR Studio, или беру готовый Makefile из разных опубликованных AVR-проектов. Например, множество проектов с отличными Makefile можно найти в составе библиотек V-USB и LUFA [4]. В этом примере я буду использовать готовый Makefile проекта USB HID устройства из библиотеки LUFA-140928. Сам проект и его makefile находятся в папке Demos\Device\ClassDriver\GenericHID. Сделайте копию содержимого этой папки в папку Вашего проекта, который Вы только что создали. В моем примере папка проекта находится в каталоге c:\TEMP\myAVRproj (у Вас это может быть любой другой каталог на диске).
Файл Makefile обычно должен быть расположен в том же каталоге, где находятся компилируемые файлы исходного кода.
Перед использованием makefile проверьте все его опции, чтобы они соответствовали Вашему компилируемому проекту. Опции makefile редактируются простым текстовым редактором. Здесь я рассмотрю в качестве примера настройку опций для микроконтроллера AT90USB162 и тактовой частоты 16 МГц (макетная плата AVR-USB162).
LUFA_PATH. здесь должен быть указан полный или относительный путь до каталога lufa-LUFA-140928/LUFA. Пример:
LUFA_PATH = c:/asm/lufa-LUFA-140928/LUFA
MCU. Здесь нужно указать тип микроконтроллера. Название микроконтроллера нужно вводить маленькими буквами. Пример:
MCU = at90usb162
BOARD. Здесь указывается символическое название целевого устройства, для которого компилируется проект. Для макетной платы это MICROSIN162:
BOARD = MICROSIN162
F_CPU. Здесь указывается тактовая частота микроконтроллера в Герцах. Она зависит от установленного кварцевого резонатора и коэффициента деления прескалера AVR. Для приложений устройств USB на микроконтроллере AT90USB162 допустимы тактовые частоты ядра 8 или 16 МГц. Пример установки тактовой частоты 16 МГц:
F_CPU = 16000000
После того, как Вы скопировали файл makefile в каталог проекта, добавьте его в каталог Файлы ресурсов проекта Visual Studio. Для этого в Обозревателе решений сделайте правый клик на папке Файлы ресурсов в дереве проекта, и выберите Добавить -> Существующий элемент, и затем в открывшемся диалоге выбора файла выберите файл makefile проекта и кликните на кнопку Добавить.
Как вариант можно просто перетащить в Проводнике файл makefile в папку проекта Файлы ресурсов.
После этого будут работать команды меню Построение -> Очистить решение, Построение -> Построить решение (F7). Однако для удобства редактирования модулей кода их следует добавить в проект.
[Шаг 4. Добавление файлов исходного кода]
Перетащите файлы исходного кода с расширением *.c (для нашего примера Descriptors.c, GenericHID.c) в папку "Файлы исходного кода" Обозревателя решений. Заголовочные файлы с расширением *.h (Descriptors.h, GenericHID.h) перетащите в папку "Заголовочные файлы" Обозревателя решений.
[Шаг 5. Перепрошивка микроконтроллера]
Теперь для полного счастья осталось настроить функцию перепрограммирования микроконтроллера прямо из среды Visual Studio. Для этого через меню Сервис -> Внешние инструменты нужно добавить запуск утилиты для программатора [3]. В этом примере вместо программатора я буду использовать встроенный загрузчик (USB bootloader) Atmel DFU, а в качестве утилиты программирования буду использовать утилиту командной строки Flip DFU (batchisp.exe [5]).
Зайдите в меню Сервис -> Внешние инструменты, нажмите кнопку Добавить.
Для добавленного пункта меню Сервис отредактируйте следующие параметры:
Команда: введите %ProgramFiles(x86)%\Atmel\Flip 3.4.7\bin\batchisp.exe - это полный путь до утилиты batchisp.exe в каталоге установки утилиты Atmel Flip.
Аргументы: введите -device AT90USB162 -hardware usb -operation erase f memory flash blankcheck loadbuffer GenericHID.hex program verify
Исходный каталог: введите $(ProjectDir)
Поставьте галочку "Использовать окно вывода".
После этих действий в меню Сервис появится дополнительный пункт Flip DFU, запускающий программирование памяти контроллера файлом GenericHID.hex через USB-загрузчик. Пример вывода после успешной операции программирования:
Примечание: для программирования плат Arduino, metaboard, AVR-USB-MEGA16 вместо batchisp.exe можно использовать утилиту AVRDUDE, она подойдет не только для работы с загрузчиками, но и с программаторами ISP. Для управления программатором JTAGICE mkII можно использовать утилиту jtagiceii.exe.