Для работы с микроконтроллерами семейства AVR есть бесплатная среда Atmel Studio. Несмотря на то, что среда включает в себя большое количество примеров исходных кодов, документацию, компилятор, средства отладки, она обладает некоторыми существенными недостатками. Первый и самый большой недостаток Atmel Studio это то, что является расширением MS Visual Studio и запустить её можно только на ОС Windows. Во-вторых, Atmel Studio, как по мне, не очень удобная среда и жрёт очень много ресурсов, также затрудняет создание и сопровождение достаточно сложных проектов с множеством файлов. Из за этого я начал искать альтернативы, такой альтернативой является среда разработки Eclipse.
Eclipse это свободная интегрированная среда разработки модульных кроссплатформенных приложений написана на Java. Развивается и поддерживается Eclipse Foundation. Чтобы среда работала нужно установить JVM. Среда подходит для разработки приложений на языках С/С++, Java, PHP, Python и других. Среда очень гибкая и можно расширить функционал, позволяет установить большое количество различных плагинов и дополнений. В данной статье мы рассмотрим способ настройки Eclipse для работы с 8-битными микроконтроллерами семейства AVR для ОС Windows. С тем же успехом можно настроить и под Linux.
Для настройки нам понадобиться собственно сам Eclipse, утилиты gnu toolchain для сборки проектов, avr-gcc компилятор и avrdude для загрузки hex-файла в память контроллера.
Eclipse C/C++
Установить Eclipse не нужно, достаточно скачать соответствующую версию (Eclipse IDE for C/C++ Developers) с официального сайта и распаковать в нужную директорию, например в E:/eclipse-cpp-neon-3/. Исполняемый файл это eclipse.exe. Но для того что бы программа запустилась, на компьютере должна быть установлена java-машина (JVM). При запуске Eclipse попросит указать путь к рабочей директории (workspace), в этой директории будут храниться все проекты. Сменить workspace можно в любое время, когда Eclipse запущен File->Switch Workspace.
Установка плагина AVR-Eclipse
Плагин AVR-Eclipse нужен для того, чтобы Eclipse мог работать с контроллерами AVR. В Eclipse плагины можно установить двумя способами: on-line, добавив ссылку на репозиторий, или из заранее скаченного архива. Мне удобнее первый вариант его и будем использовать.
- Для установки нового плагина следует выбрать в меню Help->Install New Software…
- Чтобы добавив ссылку на плагин, выбираем Add…
- В открывшемся окне указываем имя Name, к примеру: AVR-Eclipse и путь к к плагину Location: http://avr-eclipse.sourceforge.net/updatesite и жмём OK
- В окне Available Software появляется список плагинов, доступных по указанной ссылке. Ставим галочку напротив AVR Eclipse Plugin, нажимаем Next>
- Нажимаем Next>
- Соглашаемся и жмем Finish
- После установки плагина нужно перезапустить Eclipse Yes
- Узнать, установился ли плагин можно по появившейся на панели инструментов кнопки AVR* со зелёной стрелкой вниз и пункт меню AVR. Эту кнопку мы будем использовать для загрузки hex-файла. Замечание! В некоторых случаях следует переключить интерфейс Eclipse на работу с C/C++. Для этого в правом верхнем углу есть пиктограмма Open Perspective. Следует выбрать C/C++.
Настройка компилятора и утилит сборки
Пакет WinAVR содержит компилятор и утилиты для сборки. Однако WinAVR больше не развивается, а последняя версия вышла ещё в далёком 2010-ом год. Потому рекомендуется взять последний Atmel AVR Toolchain, а утилиты сборки из WinAVR. Если ранее установили Atmel Studio, тогда можете использовать его Toolchain и утилиты, у меня это: C:/Program Files (x86)/Atmel/Studio/7.0/toolchain/avr8/avr8-gnu-toolchain и C:/Program Files (x86)/Atmel/Studio/7.0/shellutils соответственно, а avrdude можете скачать с официального сайта. Также можете скачать все в сборе, Atmel AVR Toolchain + avrdude + shellutils, с нашего сайта. Распаковываем архив avr8-gnu-toolchain.zip в любое понравившееся место, в моём случае это E:/eclipse-cpp-neon-3/avr8-gnu-toolchain/, где находится сам Eclipse.
Теперь следует прописать в Eclipse пути к инструментам. Для этого:
- Заходим в меню Windows->Preferences, выбираем AVR->Paths. У меня среда уже настроена под WinAVR, но нам нужно настроить под Atmel AVR Toolchain.
- Указываем путь к AVR-GCC, для этого выбираем соответствующую строку и нажимаем Edit.
- В окне Change Path for AVR-GCC меняем Path source с System на Custom, а в Custom value указываем путь к AVR-GCC нажимая на Browse…. в моём случае это E:/eclipse-cpp-neon-3/avr8-gnu-toolchain/bin
- Аналогично прописываем путь к GNU make – директории, содержащей файл make.exe: E:/eclipse-cpp-neon-3/avr8-gnu-toolchain/shellutils. Также прописываем путь к AVR Header Files – директории с «avr/io.h»: E:/eclipse-cpp-neon-3/avr8-gnu-toolchain/avr/include. В этом же окне можно указать путь к программатору avrdude: E:/eclipse-cpp-neon-3/avr8-gnu-toolchain/avrdude.
- Сохраняем нажимая OK.
Настройка программатора USBasp
USBasp, пожалуй, самый популярный программатор для микроконтроллеров AVR Atmel. Простой, надёжный и дешёвый программатор. Чтобы работать с ним из Eclipse, для начала нужно его настроить:
- Заходим в меню Windows->Preferences, выбираем AVR->AVRDude
- В Programmer configurations нажимаем на Add…
- В открывшемся окне задаём имя конфигурации, Configuration name, к примеру USBasp, а в Programmer Hardware выбираем USBasp, http://www.fischl.de/usbasp/
- Сохраняем нажимая OK
Создание нового AVR проекта
Самый надёжный способ проверить, всё ли работает нормально, это создать и скомпилировать новый проект. Я предпочитаю C++ вместо обычного C, так как привык к синтаксису, да и можно создавать классы, что тоже очень удобно для меня.
- Создаём новый C++ проект File->New->C++ Project
- В поле Project name пишем имя проекта, а в Project type выбираем AVR Cross Target Application->Empty Project, а в Toolchains — AVR-GCC Toolchain. Жмём Next>
- В окне Select configurations нажимаем на Advanced settings… для настройки проекта
- В AVR->AVRDude находим Programmer configuration и выбираем USBasp, которого настроили ранее
- Также нужно настроить C/C++ билдер. Переходим в C/C++ Build->Settings->Tool Settings и в Additional Tools in Toolchain ставим галочку напротив Generate HEX file for Flash memory, чтобы генерировать HEX файл, который и будет загружен на наш микроконтроллер
- Переходим в AVR Compiller->Oprimization и меняем Optimization Level на Slight Optimizations (-O1). Если не оптимизировать код, тогда самый простой Hello World не поместится на МК
- Тоже самое делаем и в AVR C++ Compiller->Oprimization. Сохраняем и нажимаем Next>
- В AVR Target Hardware Properties выбираем наш МК MCU Type, в моём случае это ATmega16. Также пишем и частоту, MCU Frequency (HZ), к примеру 8000000МГц
- Жмём Finish и проект готов
Создание файла main.cpp
Так как мы создали C++ проект, нам нужно создать .cpp файл. Был бы обычный C проект, тогда расширение файла была бы .c
- Переходим в File->New и выбираем Source file и жмём Next>
- Source Folder в данном случае это наш ранее созданный проект, а Source Name это имя файла, я назвал его main.cpp. Жмём Finish
- Пишем какой-то Led Blinking пример
- Собираем проект: Project->Build Project
- Загружаем HEX файл на наш контроллер AVR->Upload Project to Target Device
- Если программатор UABasp подключен между контроллером и компьютером, тогда вы должны получить примерно такой результат в логах. Также стоит не забывать и о фьюзах.
Launching E:\eclipse-cpp-neon-3\avr8-gnu-toolchain\avrdude\avrdude -pm16 -cusbasp -Uflash:w:Atmega16_blink.hex:a Output: avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9403 (probably m16) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: reading input file "Atmega16_blink.hex" avrdude: input file Atmega16_blink.hex auto detected as Intel Hex avrdude: writing flash (152 bytes): Writing | ################################################## | 100% 0.18s avrdude: 152 bytes of flash written avrdude: verifying flash memory against Atmega16_blink.hex: avrdude: load data flash data from input file Atmega16_blink.hex: avrdude: input file Atmega16_blink.hex auto detected as Intel Hex avrdude: input file Atmega16_blink.hex contains 152 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.13s avrdude: verifying ... avrdude: 152 bytes of flash verified avrdude done. Thank you.
Полезные ссылки
Eclipse IDE for C/C++ Developers
Atmel AVR Toolchain + avrdude + shellutils
AVR Eclipse Plugin Download
Atmel AVR Toolchain
AVRDUDE — AVR Downloader/UploaDEr
WinAVR