Использование различных GCC тулчейнов для AVR

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\»

    Далее распакуем какой-нибудь из тулчейнов. В пути до исполняемых файлов тулчейна не должно быть пробелов и кириллических символов! То есть лучше всего распаковать (или установить) их в следующие папки:
C:\winavr\
C:\atmel_avr\
C:\kgp_avr\
C:\mhvavrtools\

    Многие из тулчейнов не просто распаковываются, а устанавливаются в систему, при этом они модифицируют так называемую переменную окружения — Path.
Path находится следующим образом для win7:
Пуск -> Компьютер -> Свойства -> Дополнительные параметры системы -> Переменные среды -> Path
Проще говоря Path — это те программы которые доступны всегда из командной строки, в какой бы директории вы не находились. В этой переменной окружения нужно оставить только один из avr-тулчейнов, например «c:\winavr\bin;», остальные нужно удалить, при этом не трогая ничего кроме avr-тулчейнов. Этот один оставшийся тулчейн будет работать по умолчанию как основной, если у нас не будет указано иного. Для того чтобы изменения в Path вступили в силу, нужно перезагрузиться.

    Теперь можно скомпилировать файл simple.c, набрав в командной строке:
C:\avr_simple>avr-gcc -mmcu=attiny45 -I. -DF_CPU=16000000UL -Os simple.c -o simple.elf
C:\avr_simple>avr-objcopy -O ihex simple.elf simple.hex
Программа будет скомпилирована тулчейном по умолчанию.

    Далее, для того чтобы все эти (и не только эти) сборки заработали вместе и не мешали друг другу на компьютере, под управлением 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 = attiny45
Дальше эту переменную, $(MCU), можно подставлять в другие:
CFLAG = -mmcu=$(MCU) -I. -DF_CPU=16000000UL -Os
А также дополнять переменные:
CFLAG += -pedantic
Если же объявить еще одну переменную с тем же названием, то верхняя видна уже не будет. Поэтому, частенько, когда забываешь поставить '+', перед '=', ничего не работает.
SRC =$(TARGET).c
SRC =hd44780.c
Соответственно в переменной SRC будет только hd44780.c, и при компиляции выскочит ошибка.

— далее идут цели.
цель: зависимость
        исполняемая-команда
(Важно! — Команды должны начинаться с символа Табуляции [Tab] )
Вот, в принципе, и все что нужно знать чтобы редактировать makefile'ы. Команда make, выполненная в директории, ищет makefile в этой директории и обрабатывает его.
Для того чтобы поменять тулчейн нужно поменять всего одну строчку в makefile, а дальше отработает скриптик скопипащенный мной с просторов форума electronix.ru.

В начале выбирается сам тулчейн, сюда можно добавить и свой.

Собственно сам исходник, который выбирает, выглядит так:


Исходники для копипасты: simple.zip

P.S. У klen'а новый релиз тыц. Только там надо еще переменную
TARGET_PREFIX = avr-
заменить на
TARGET_PREFIX = avr-kgp-elf-

P.P.S. У www.makehackvoid.com/ тоже все обновилось. Версия GCC 4.6.2 Тыц.
Как и у Atmel'а тыц.
  • +1
  • 11 декабря 2011, 21:25
  • hexanaft

Комментарии (6)

RSS свернуть / развернуть
Фишка в том, что вот это работает только потому, что в системе есть WinAVR с sh:

@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
$(AVRMEM) 2>/dev/null; echo; fi

Ну и пару других штук, которые в моём посте…
0
Хотя. скорее всего она есть в msys, там же, где ты берёшь make, верно?
0
Да, я не пользуюсь WinAvr'ской msys. Так как имеются разные gcc'ки в системе, начиная от avr и mingw, до arm и mips. Короче полный выводок =)
0
Да, у меня при изменении PATH ребутится не нужно, достаточно консоль переоткрыть…
0
Жуть.
Всё-таки юниксовый подход органично выглядит в никсах. В винде это всё смотрится жуткими костылями. Имхо, либо линукс в чистом виде и бесплатный софт, либо винда и нормальные IDE, без костылей.
0
  • avatar
  • ACE
  • 11 декабря 2011, 23:43
да ну, какие костыли? один раз поправил make-файл для проекта и потом просто запускаешь его как батник… он же в зависимости от ключиков еще и сразу зашить прогу может. А IDE умеют пользоваться внешними make-файлами, в результате получаем тот-же 1 тык.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.