- Использование различных GCC тулчейнов для AVR
- Настройка Eclipse для работы с AVR
- Eclipse
- Плагин AVR-Eclipse
- Компилятор и утилиты сборки
- Linux AVR Eclipse
- Как скомпилировать и записать код на микросхему AVR в Linux / MacOSX / Windows?
- 1. Установка avr-gcc и инструментов
- Linux, Ubuntu
- Mac OSX
- Windows
- 2. Компиляция и запись кода
- Пример кода
- Компиляция
- Создание .HEX
- Программирование
- 3. Make и makefiles
- Резюме
Использование различных GCC тулчейнов для AVR
Написал давно, но что-то как-то не мог собраться и дописать. На фоне этого сообщения решил запостить, в общем выкладываю как есть.
Самый популярный gcc тулчейн для AVR микроконтроллеров является WinAVR. Но отнюдь не единственный в своем роде.
Итак:
— собственно WinAVR, ну про него много чего и так понаписано в интернетах, качественно и стабильно, но не часто обновляется.
На данный момент WinAVR 20100110 используется версия gcc 4.3.3
— от Atmel avr-toolchain-3.0.0.240 тут говорят старовата coreutils. По качеству и стабильности догоняет WinAVR. Версия gcc 4.4.3
— от klen’а с форума electronix.ru. Делает свои сборки под разные архитектуры с последними версиями gcc. Последняя версия с форума. Прямая ссылка kgp_avr_20100725.
Сам он говорит, что затачивает свои сборки на скорость исполнения и рекомендует использовать свои сборки только для экспериментов. Версия gcc 4.6.0
(new avr-kgp-elf-x86_32-20111121.7z Версия gcc 4.7.0)
— от Make Hack Void — http://www.makehackvoid.com из Австралии. Сборка MHV AVR Tools. Версия gcc 4.5.1
— также можно собрать свою сборку… (Тут многоточие, об этом можно много почитать в интернетах)
Для примера использования тулчейнов, возьмем простенький проект:
Сохраним его в файл simple.c и в папку «c:\avr_simple\»
Далее распакуем какой-нибудь из тулчейнов. В пути до исполняемых файлов тулчейна не должно быть пробелов и кириллических символов! То есть лучше всего распаковать (или установить) их в следующие папки:
Многие из тулчейнов не просто распаковываются, а устанавливаются в систему, при этом они модифицируют так называемую переменную окружения — Path.
Path находится следующим образом для win7:
Проще говоря Path — это те программы которые доступны всегда из командной строки, в какой бы директории вы не находились. В этой переменной окружения нужно оставить только один из avr-тулчейнов, например «c:\winavr\bin;», остальные нужно удалить, при этом не трогая ничего кроме avr-тулчейнов. Этот один оставшийся тулчейн будет работать по умолчанию как основной, если у нас не будет указано иного. Для того чтобы изменения в Path вступили в силу, нужно перезагрузиться.
Теперь можно скомпилировать файл simple.c, набрав в командной строке:
Программа будет скомпилирована тулчейном по умолчанию.
Далее, для того чтобы все эти (и не только эти) сборки заработали вместе и не мешали друг другу на компьютере, под управлением windows, понадобится как минимум MSYS (Minimal SYStem). MSYS это минимальное unix окружение, в которое входит утилита make, нужная для автоматизации сборки, и соответственно сам makefile проекта. Во многие сборки эта среда уже входит, например в winavr. Лично я использовал MSYS отсюда nuwen.net/mingw.html, вот прямая ссылка msys-6.3.7z (2.4 MB). Содержимое архива .7z распаковывается в c:\msys\. В папке появятся толпа .tar архивов, распаковываем в ту же папку, а архивы удаляем. Теперь в этой папке, c:\msys\, лежат папки bin\ etc\ и тд, а также msys.bat. Этот скрипт прописывает собственно msys в Path. Можно сделать это вручную, прописав в Path адрес куда msys положен, в нашем случае C:\msys\bin;. А вот makefile лучше всего иметь свой и копировать его из проекта в проект, а в начале скопировать его с кого-нибудь еще (например с меня), как я когда-то тоже его скопипастил.
Собственно makefile имеет следующую структуру:
— вначале объявление различных переменных
Например:
Дальше эту переменную, $(MCU), можно подставлять в другие:
А также дополнять переменные:
Если же объявить еще одну переменную с тем же названием, то верхняя видна уже не будет. Поэтому, частенько, когда забываешь поставить ‘+’, перед ‘=’, ничего не работает.
Соответственно в переменной SRC будет только hd44780.c, и при компиляции выскочит ошибка.
— далее идут цели.
(Важно! — Команды должны начинаться с символа Табуляции [Tab] )
Вот, в принципе, и все что нужно знать чтобы редактировать makefile’ы. Команда make, выполненная в директории, ищет makefile в этой директории и обрабатывает его.
Для того чтобы поменять тулчейн нужно поменять всего одну строчку в makefile, а дальше отработает скриптик скопипащенный мной с просторов форума electronix.ru.
В начале выбирается сам тулчейн, сюда можно добавить и свой.
Собственно сам исходник, который выбирает, выглядит так:
Настройка Eclipse для работы с AVR
Фирма Atmel для работы со своими микроконтроллерами семейства AVR предлагает бесплатную (freeware) среду Atmel Studio (в настоящий момент актуальна версия 6.2 service pack 1). Несмотря на то, что среда включает в себя большое количество примеров исходных кодов, документацию, компилятор, средства отладки, она обладает некоторыми существенными недостатками. Во-первых, так как Atmel Studio основывается на MS Visual Studio, а по сути, является ее расширением, то запуск ее под операционными системами отличными от Windows в полном объеме проблематичен. Во-вторых, Atmel Studio не умеет работать с make-файлами, что затрудняет создание и сопровождение достаточно сложных проектов с множеством файлов. Это особенно актуально при использовании в проекте встраиваемой операционной системы, например Contiki или FreeRTOS. В связи с этим мы рекомендуем использовать для работы со стендом LESO6 интегрированную среду разработки Eclipse.
Eclipse представляет собой свободную (с открытыми исходными кодами) интегрированную среду разработки. Среда написана на Java и потому работает на различных операционных системах: Windows, Linux, Mac OS. Для работы должна быть установлена java-машина. Среда подходит для разработки приложений на языках С/С++, Java, PHP и других. Модульная структура позволяет установить большое количество различных плагинов и дополнений, тем самым значительно расширить функционал. Однако за универсальность нужно платить, для того чтобы адаптировать среду для конкретной задачи придется выполнить соответствующую настройку. В данной статье мы рассмотрим способ настройки Eclipse для работы с 8-битными микроконтроллерами семейства AVR для операционных систем Windows и Linux.
Нам понадобиться собственно сам Eclipse, для сборки проектов нужны утилиты gnu toolchain, понадобиться компилятор avr-gcc, для загрузки hex-файла в память контроллера будем использовать avrdude. Все это свободно распространяется, доступно для различных операционных систем и имеет открытые исходные коды. В начале рассмотрим процесс сборки для ОС Windows.
Eclipse
Сам Eclipse в установке не нуждается, достаточно скачать соответствующую версию (Eclipse IDE for C/C++ Developers) с официального сайта (регистрация не требуется) и распаковать в нужную директорию, например в C:\Program Files. Исполняемый файл – eclipse.exe. Для удобства запуска можно создать ярлык на рабочем столе. Но для того что бы программа запустилась, на компьютере должна быть установлена java-машина. Если она до сих пор не установлена, то ее можно скачать и установить с сайта www.java.com. При запуске Eclipse попросит указать путь к рабочей директории (workspace), в этой директории будут храниться все проекты. Рекомендуем для каждого пользователя создать отдельную директорию. Сменить workspace можно в любое время, когда Eclipse запущен.
Плагин AVR-Eclipse
Плагин нужен для того, чтобы Eclipse научился работать с контроллерами AVR. Плагин можно установить двумя способами: on-line, добавив в программу ссылку на репозиторий, или из заранее скаченного архива. Как установить плагин on-line рассмотрим в разделе, посвященному Linux, сейчас же покажем как работает второй способ. Получить архив можно на сайте AVR-Eclipse, либо скачать с нашего сайта. Для установики следует выбрать в меню «Help» пункт «Install New Software. «.
В открывшемся окне указываем путь к архиву de.innot.avreclipse.p2repository-2.4.2. (Кнопка Archive. ).
В окне «Available Software» появляется список плагинов, содержащихся в выбранном архиве. Ставим галочку напротив «AVR Eclipse Plugin«, нажимаем Next.
Отвечаем на все вопросы утвердительно, со всем соглашаемся и жмем Next. Плагин установлен. Узнать, что все прошло успешно можно по появившейся на панели инструментов кнопки AVR* со стрелочкой вниз. Эту кнопку мы будем использовать для загрузки hex-файла в память программ (если проект создан не из готового make-файла).
Замечание! В некоторых случаях следует переключить интерфейс Eclipse на работу с C/C++. Для этого в правом верхнем углу есть пиктограмма «Open Perspective«. Следует выбрать C/C++.
Компилятор и утилиты сборки
И компилятор и утилиты для сборки можно получить, установив пакет WinAVR. Однако проект больше не развивается, и последняя версия (2010 год) включает в себя совсем не новый gcc-4.3.3. Потому рекомендуется взять последний Atmel AVR Toolchain с www.atmel.com, а утилиты сборки из WinAVR. Или скачать все в сборе с нашего сайта. Распаковываем архив avr8-gnu-toolchain.zip в любое понравившееся место, в примере это C:\avr_tools, а можно в папочку с самим Eclipse. В результате должна появиться директория avr8-gnu-toolchain.
Теперь следует прописать в Eclipse пути к инструментам. Для этого заходим в меню Windows->Preferences, выбираем AVR->Paths. Указываем путь к AVR-GCC, для этого выбираем соответствующую строку, нажимаем Edit.
Path source устанавливаем в Custom, жмем Browse.., указываем путь к директории с файлом avr-gcc.exe. В нашем примере это «C:\avr_tools\avr8-gnu-toolchain\bin«.
Аналогично прописываем путь к GNU make – директории, содержащей файл make.exe. Относительно avr8-gnu-toolchain это utils\bin. Если используете WinAVR непосредственно, то utils\bin можно взять оттуда. Для нашего примера это «C:\avr_tools\avr8-gnu-toolchain\utils\bin«. Также прописываем путь к AVR Header Files – директории с «avr/io.h«. Относительно avr8-gnu-toolchain это «avr\include«. В этом же окне можно указать путь к программатору avrdude, более подробно о программаторе, и работе с ним поговорим в отдельной статье.
На этом настройку среды разработки будем считать завершенным.
Linux AVR Eclipse
Развертывание системы на базе операционной системе Linux покажем на примере Ubuntu 14.04. В различных ОС процесс может несколько отличаться, однако общая последовательность действий остается аналогичной. Следует заметить, что в приведенном примере установка осуществляется при наличии активного соединения Internet, совокупный объем принятых данных составит порядка 200-300 Мбайт. Для установки понадобятся права суперпользователя.
1. Устанавливаем Eclipse:
2. Устанавливаем поддержку С/С++:
3. Устанавливаем компилятор AVR-GCC, ассемблер компоновщик binutils-avr, стандартную библиотеку для С под AVR:
Как скомпилировать и записать код на микросхему AVR в Linux / MacOSX / Windows?
Это краткое руководство для начинающих, которое направлено на то, чтобы показать, как установить инструменты, скомпилировать код с помощью avr-gcc и отправить его в микроконтроллер с помощью avrdude.
Оно также знакомит с основами автоматизации этой задачи, помещая все инструкции в Makefile. Файлы примера ( main.c, main.bin, main.hex, Makefile) упакованы в архив который можно скачать по ссылке в конце данной статьи.
1. Установка avr-gcc и инструментов
Для компиляции исходного кода вашей прошивки на C и/или C ++ вам понадобится компилятор gcc-avr, библиотека C avr-libc и avrdude. Что очень полезно, существуют полные и простые в установке пакеты для всех основных платформ.
Linux, Ubuntu
Ubuntu предоставляет пакеты, поэтому вы можете просто установить их с помощью этой команды:
Mac OSX
Загрузите AVR MacPack. В образе диска MacPack есть установщик, который все сделает за вас.
Windows
Загрузите WinAVR, который включает в себя все необходимое и имеет хороший установщик.
2. Компиляция и запись кода
Теперь, когда у вас установлен компилятор, следующий шаг — скомпилировать простой исходный код в файл .BIN, затем сгенерировать файл Intel .HEX и, наконец, записать этот файл .HEX на микросхему AVR с помощью программатора для AVR.
Пример кода
Вот пример содержимого файла main.c. Код ничего не делает, кроме зацикливания в бесконечном цикле, но это для примера.
Компиляция
Приведенная ниже команда скомпилирует ваш код. Это GCC, поэтому я полагаю, что он вам знаком, и никакой дополнительной информации не требуется. Если вы хотите выполнить компиляцию для другого MCU, вам нужно указать соответствующую опцию -mmcu.
После успешной компиляции вы можете проверить размер памяти программы и данных с помощью этой команды:
AVR Memory Usage
—————-
Device: Unknown
Program: 40 bytes
(.text + .data + .bootloader)
Data: 0 bytes
(.data + .bss + .noinit)
Создание .HEX
Большинство программаторов не принимают в качестве входного файла исполняемый файл GNU. Поэтому нам нужно проделать некоторую работу.
Итак, следующий шаг — преобразование информационной формы .BIN в файл .HEX. Утилита GNU, которая делает это, называется avr-objcopy.
Программирование
Утилита под названием avrdude может программировать микропроцессоры, используя содержимое файлов .HEX, указанных в командной строке.
С помощью приведенной ниже команды файл main.hex будет записан во флэш-память. Параметр -p attiny13 позволяет avrdude узнать, что мы работаем с микроконтроллером ATtiny13. Другими словами — эта опция определяет устройство.
Полный список поддерживаемых чипов можно найти здесь. Обратите внимание, что также допустимо использовать и полные имена (т. е. t13 равно attiny13).
И вуаля! Чип запрограммирован.
3. Make и makefiles
Теперь мы можем автоматизировать этот процесс, создав Makefile и поместив туда наши команды. Структура Makefile очень проста, и дополнительную информацию о ней можно найти здесь . Утилита make автоматически считывает файл Makefile в папке, в которой вы ее запускаете. Взгляните на готовый пример:
Если вы запустите в терминале простую команду make , будет выполнена только метка «all». При запуске (sudo) make flash будет выполнена метка «flash» и так далее.
avr-gcc -std=c99 -Wall -g -Os -mmcu=attiny13 -DF_CPU=1200000 -I. -o main.bin main.c
avr-objcopy -j .text -j .data -O ihex main.bin main.hex
avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e9007
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 «main.hex»
avrdude: writing flash (40 bytes):
avrdude: 40 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 40 bytes
avrdude: reading on-chip flash data:
avrdude: verifying …
avrdude: 40 bytes of flash verified
avrdude: safemode: Fuses OK (H:FF, E:FF, L:6A)
avrdude done. Thank you.
Резюме
По сути, если предположить, что наша программа находится в main.c , только эти три вещи необходимы для компиляции и записи кода на чип AVR.
- $ avr-gcc -Wall -g -Os -mmcu=attiny13 -o main.bin main.c
- $ avr-objcopy -j .text -j .data -O ihex main.bin main.hex
- $ avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb
Важно подчеркнуть, что мы можем легко автоматизировать весь процесс с помощью Makefiles. Рано или поздно она вам понадобится!
Скачать файлы примера (2,1 KiB, скачано: 93)