Софт-Портал

Atmel Studio Linux

Рейтинг: 5.0/5.0 (435 проголосовавших)

Категория: Windows

Описание

Atmel studio linux

WinAVR

Мощная среда разработки с открытым исходным кодом, созданная с целью написания программ для микроконтроллеров серии AVR от компании Atmel .

WinAVR состоит из GNU GCC компилятора, поддерживающего языки C, C+ и Objective-C, обеспечивая полный цикл разработки для AVR/AVR32 и дополнительных инструментов, каждый из которых выполняет определенную задачу, помогая написанию программного обеспечения для микроконтроллеров. Наиболее важные из них:
• Programmers Notepad – текстовый редактор для создания программ;
• AVR-LibC – библиотека микроконтроллеров AVR;
• AVRDUDE – утилита, предназначенная для программирования микросхем и использующая SPI-интерфейс;
• GNU Debugger (GDB) – отладчик с командной строкой;
• Insight – отладчик с графическим интерфейсом;
• Simulavr – симулятор микроконтроллеров AVR с поддержкой отладчика GDB;
• SRecord – целый набор утилит для работы с загрузочными файлам EPROM разных форматов.

Работать с WinAVR очень просто, в возникающих вопросах помогает разобраться полный набор документации. Программа создает компактный, довольно приличный код, по синтаксису напоминающий классический язык С. Среди недостатков – отсутствие настройки аппаратуры AVR с помощью исходного кода и интерфейса с другими устройствами. WinAVR может объединяться с фирменным программным обеспечением микроконтроллеров Atmel Studio. Вместе эти пакеты позволяют проводить разработку и интуитивную отладку программ, поддерживая все возможности чипов Atmel.

Программное обеспечение выпущено под лицензией GNU и распространяется абсолютно бесплатно. Каждый пользователь может изменить или доработать программу по своему усмотрению. Кроме этого существует портативная версия пакета, не требующая установки, для хранения на внешнем носителе информации. Адресная строка места инсталляции WinAVR не должна содержать пробелы и кириллические символы. После установки программы появляется целая коллекция ярлыков, запускающая различные утилиты пакета. Основным из них является "Programmers Notepad". Инструкция и примеры лежат в папке WinAVR\doc\avr-libc.
Разработчик программного комплекса – Eric B. Weddington. Его сайт http://winavr.sourceforge.net/ содержит всю необходимую информацию по WinAVR. В настоящее время дальнейшее развитие программы была приостановлено в связи с тем, что Эрик работает над Atmel Studio, являющейся прямым продолжением WinAVR.

Язык интерфейса WinAVR английский и русификатора к нему нет.

Программа поддерживает все 32-битные операционные системы Windows. Существует версия для работы в Linux-системах.

Распространение программы: Freeware (бесплатная)

Комментарии (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.

МиниПК MK809V - 4 ядра, Android 4.4.2

1999-2016 СМИ Сайт-ПАЯЛЬНИК 'cxem.net'

При использовании материалов сайта, обязательна
ссылка на сайт ПАЯЛЬНИК и первоисточник

Atmel studio linux:

  • скачать
  • скачать
  • Другие статьи, обзоры программ, новости

    Atmel studio linux

    Программирование AVR под Linux

    Наверное каждый кто пишет программы под AVR микроконтроллеры и имеет на компе Linux задумывался о том чтобы писать именно на нем. И часто это оказывается не так просто. Проблема тут в отсутствии единого подхода. Каждый выкручивается как может. В отличии от Windows, где поставил AVRstudio и все готово. (конечно и под винду есть другие варианты, но статья не об этом). Лично для меня этот вопрос был одной из главных трудностей при переходе на Linux. И даже когда я уже по большей части сидел только на нем, все равно частенько приходилось загружать Windows чтоб запустить родную студию :) Поэтому я решил написать статейку на эту тему. Надеюсь она снимет некоторые вопросы у желающих писать программки для AVR под линуксом. Статья ориентирована скорее на начинающих, поэтому все будет подробно разжевано, а все консольные команды с пояснениями. Используется дистрибутив Linux Ubuntu, но все прокатит и на любом другом.

    Что нам для этого понадобится:

    geany - прокачанный текстовый редактор с кучей вкусностей о которых ниже, в нем мы будем писать исходные коды.
    avra или gcc-avr - компилятор для AVR, он превратит наш исходный код в прошивку для контроллера.
    avrdude - крутой прошивальщик который поддерживает кучу разных программаторов и контроллеров, с его помощью будем заливать прошивку в контроллер.
    Устанавливаем все это добро. Открываем терминал и вводим:

    Возможно, некоторых программ не будет в стандартных репозиториях - тогда репозитории с ними нужно подключить, отредактировав файл /etc/apt/sources.list (после этого не забываем sudo apt-get update) или собрать из исходников. Короче, если что-то из этого на ваш дистрибутив не поставится - погуглите.

    Теперь нам понадобится папка с аппноутами для каждого микроконтроллера. Можно взять из недр AVRstudio у кого она есть, но там в дефайнах используется символ '#' на который ругается avra, так что во вложениях к статье есть архив с "хорошими" дефайнами. В эту же папку я кладу свои файлики с макросами которые я использую. Когда все это есть можно уже в принципе приступать к написанию кода. У меня в домашней директории есть папка Projects, а в ней папка AVR, в которой у меня лежит папка APPNOTES а так же все проекты (каждый в отдельной папке).
    Таким образом путь, скажем, к дефайну для ATmega8

    /Projects/AVR/APPNOTES/m8def.inc
    А к исходному коду проекта Example

    /Projects/AVR/Example/Example.asm
    Все дальнейшее в статье будет изложено исходя из такой структуры, хотя от этого мало что зависит и не составит труда адаптировать все это дело к другой системе.
    Пишу я все на ассемблере, но опять же, не составит труда проделать то же самое на С, просто надо использовать gcc-avr вместо avra.

    1. Создаем в Geany файл Example.asm с исходным кодом

    2. Компилируем его с помощью avra:
    avra --includepath

    /Projects/AVR/APPNOTES Example.asm
    Опция --includepath указывает путь к папке, из которой будут браться все инклуды по умолчанию.
    Т.е. в коде подключение файла с дефайнами будет выглядеть как .include "tn2313def.inc"
    Примечательно, что в справке к avra эта опция значится как --includedir, но если так и ввести, то сама же avra начинает на это ругаться :) так что пишем именно --includepath
    Если в коде будут встречены ошибки, avra напишет нам об этом в консольку, с указанием номеров строк с ошибками. Если компиляция прошла успешно, то мы получим файлик Example.hex который нам и назо залить в контроллер.

    3. прошиваем контроллер через avrdude
    sudo avrdude -p t2313 -c usbasp -U flash:w:Example.hex
    Опции:
    -p указывем тип контроллера
    -c - используемый программатор
    -U указывает файл, с которым будет работать прошивальщик
    Модификаторы flash:w: определяют каким образом будет использоваться указанный файл. В данном случае - запись во флеш.

    Все, в принципе тут можно и остановиться, но ведь это неудобно до жути - каждый раз руками лапами вбивать всю эту лабуду в консоль. Да еще и в голове держать синтаксис команд, а она-то не резиновая. Вот тут то и настало время "вкусностей" Geany, из-за которых мы именно его и выбрали. Geany задуман как редактор именно для программистов, поэтому в нем есть три абстрактных действия с файлами: компиляция, сборка и запуск. При этом пользователь может сам определить какие команды должны выполняться в этих действиях.
    Таким образом, мы получаем возможность повесить запуск avra на действие "компиляция" (или gcc-avr если вы пишете на С) а на "запуск" - avrdude. Еще останется свободным "сборка".
    Запускаем наш редактор, открываем файл с исходником и жмем Сборка - Установить комманды сборки.
    Видим вот такое окошко:

    В поля "Скомпилировать" и "Выполнить" (на скрине подсвечено оранжевеньким) вводим соответственно команды для компиляции и прошивки в кристалл программы.
    Все замечательно, но как указать имя файла если мы заранее его не знаем? Тут на помощь приходят 4 шаблона, которые Geany подставляет в команды в процессе их выполнения:
    %f - имя текущего файла (в данном случае это Example.asm)
    %e - имя текущего файла без расширения (Example)
    %d - путь к папке, в которой лежит текущий файл (

    /Projects/AVR/Example/)
    %p - путь к текущему проекту (я так и не разобрался что это значит, но не важно :))
    Так что команда для компиляции будет выглядеть так:

    sudo avrdude -p t2313 -c usbasp -U flash:w:%e.hex

    Теперь для того чтобы программа скомпилировалась достаточно нажать F8 (или кнопочку с треугольником и кружочком в самом верху), а чтобы прошилась в контроллер - F5 (или кнопочку с шестеренками).

    Так гораздо удобнее, но все еще не идеально - avrdude требует запуска через sudo, поэтому нужно каждый раз вводить пароль при прошивке. Для устранения этой досадной несправедливости откроем терминал и введем:

    Этим мы открываем права на запуск avrdude. Теперь можно запускать avrdude без sudo:

    avrdude -p t2313 -c usbasp -U flash:w:%e.hex

    Но и теперь процесс не полностью автоматизирован - если мы вдруг решили написать прогу для другого контроллера, то по прежнему нужно лезть в настройки и менять опцию -p у avrdude. Как заставить Geany самому распознавать контроллер? А например по строчке .include "m8def.inc" которая есть в каждой программе.
    Для этого давайте напишем небольшой скрипт, который будет это делать. Вернее я его уже написал, а вам предлагается только почитать комментарии к нему, или даже просто скопипастить :) Вот он:

    WARNING. В статье не отображаются бекслэши, поэтому они заменены обычными слешами красного цвета: /

    PART=`grep -m 1 " / .include / ".*def / .inc / "" %f | grep -o " / (tn / |m / )[0-9] / +" | sed "s/tn/t/g"` && echo "target device: $PART" && avrdude -p $PART -c usbasp -U flash:w:"%e.hex" && exit

    (В конце статьи есть файлик filetypes.asm, в котором все это есть. Можно вместо переписывания скриптов просто закинуть его куда надо (

    Всю эту здоровенную строку нужно вбить в поле "Выполнить"
    Пояснения:
    Сначала мы создаем строковую переменную PART, в которую заносим результат выполнения скрипта, определяющего тип контроллера (о самом скрипте чуть ниже)
    Затем выводим в консоль название распознанного контроллера (просто так, для справки), потом запускаем avrdude, подставляя в него нужную опцию, ну и в конце я добавил exit чтоб окно терминала само закрывалось после удачной прошивки.
    У связки && есть одна приятная особенность: следующая команда выполняется только в случае успешного завершения предыдущей. Таким образом, если при прошивке что-то пошло не так терминал не закроется и мы сможем почитать об ошибках.
    Теперь подробнее о скрипте:
    первый grep находит в файле с исходником строчку вида .include "[тут что угодно]def.inc", опция -m 1 указывает что не стоит продолжать поиск, если хотя бы одна строка найдена.
    Второй получает то что нашел первый и его задача из всей строки высосать именно название контроллера. Делается это с помощью шаблона, задающего вид имени контроллера и опции -o которая говорит ему чтоб выводил только тот кусок что нашел, а не всю строку. Я использую только меги и тиньки, поэтому у меня только tn и m, но вы можете адаптировать скрипт и для других серий. Например для xmega будет (tn|m|x) а для AT90S (tn|m|x|[0-9]) (у AT90S название только из цифр) ну и так далее.
    Последняя команда sed заменяет tn на t. Дело в том, что в аппноутах от Атмела тинька 2313 например зовется как tn2313, а avrdude ее понимает как t2313. Вот и приходится изворачиваться.

    Ну вот, теперь все совсем уж замечательно и в конечном виде команды компиляции и прошивки выглядят так:

    PART='grep -m 1 " / .include / ".*def / .inc / "" %f | grep -o " / (tn / |m / )[0-9] / +" | sed "s/tn/t/g"' && echo "target device: $PART" && avrdude -p $PART -c usbasp -U flash:w:"%e.hex" && exit

    Осталась последняя маленькая деталь, которую стоит обсудить - фьюзы.
    В принципе, avrdude позволяет их устанавливать, но для этого нужно укурившись даташитом пересчитать их в шестнадцатеричную систему и потом подсунуть в avrdude. Учитывая высокую вероятность ошибки и крайнюю трагичность ее последсятвий такой вариант сразу отметается. Мы же будем для этого юзать графическую оболочку к avrdude - avr 8 burn'o'mat. Качаем deb-пакет с их сайта. устанавливаем. У меня он просто так ставиться не захотел, пришлось подредактировать кое-что. Во вложениях к статье - исправленный deb-пакет. Если возникнут с этим проблемы - пишите в форум, разберемся.

    При первом запуске ее нужно настроить. Переходим во вкладку Settings - AVRDUDE
    Видим вот такое окно:

    Сюда нужно ввести путь к avrdude, к файлу с ее настройками, тип вашего программатора и порт к которому он подключен. В общем, ставим все как на скрине.
    Все, после этого выбираем нужный контроллер, жмем Fuses и правим их как надо.

    Перед исправлением фьюзов сначала обязательно их считывайте с кристалла! Да и вообще, поаккуратней с ними :)

    Можно даже запуск avr8-burn-o-mat повесить на оставшееся свободным действие "Сборка". Тогда вообще все просто замечательно выходит: F8 - скомпилировать, F5 - прошить, F9 - поправить фьюзы.

    Ну вот и все, теперь вы сможете с легкостью писать AVR программки из-под вашего любимого линукса.
    Удачи вам и правильных фьюзов :)

    Программирование и отладка микроконтроллеров ARM Cortex-M4 фирмы Atmel в среде операционной системы Linux

    Программирование и отладка микроконтроллеров ARM Cortex-M4 фирмы Atmel в среде операционной системы Linux. Часть 2

    Продолжение электронной версии статьи из номера №2 за 2016 год журнала Компоненты и технологии. Автор Курниц Андрей. Ссылка на первую часть

    Создание, запуск и отладка примитивной программы на Atmel SAM4S микроконтроллере

    Теперь, когда на рабочую станцию установлено и настроено программное обеспечение для разработки под Atmel SAM4S микроконтроллеры, можно убедиться в работоспособности системы, создав простейшую программу, которая будет зажигать и гасить светодиод на плате SAM4S-EK.
    Чтобы собрать работоспособную программу для микроконтроллера, помимо инструментария GCC необходимы следующие компоненты:

    1. Библиотека CMSIS (Cortex Microcontroller Software Interface Standard) — описывает единый интерфейс взаимодействия с ядром микроконтроллеров ARM Cortex-M — общая для микроконтроллеров ARM Cortex-M различных производителей.
    2. Библиотека для взаимодействия с периферией данного семейства микроконтроллеров — своя для каждого производителя, будь то Atmel, STMicroelectronics, NXP и др.
    3. Скрипт линковщика (linker script) — файл с указаниями о размещении программы во flash-памяти микроконтроллера, а также о размещении в ОЗУ служебных областей (секций): стек, куча и др. Для различных микроконтроллеров с разными объемами памяти используются соответственно различные скрипты линковщика.
    4. Файл syscalls.c — содержит системные функции, необходимые для работы стандартной библиотеки языка C (реализация newlib). Обычно эти функции являются частью операционной системы, для которой предназначена программа. Однако в случае же микроконтроллера, который чаще всего работает без операционной системы, в сборку должен быть включен файл syscalls.c, содержащий в большинстве своем пустые системные функции [10].
    5. Справедливости ради следует отметить, что существует множество операционных систем, разработанных специально для микроконтроллеров.
    6. Код начальной инициализации (startup code) — отвечает за заполнение таблицы векторов прерываний соответствующими обработчиками, в том числе и обработчиком прерывания по сбросу микроконтроллера (reset handler).
    7. Также содержит реализацию обработчика прерывания по сбросу, который обнуляет необходимые секции памяти, инициализирует стандартную библиотеку C и передает управление в точку входа программы — в функцию main().
    Библиотека Atmel Software Framework

    Для создания программ для своих микроконтроллеров фирма Atmel свободно распространяет библиотеку Atmel Software Framework (сокращенно ASF) для языков C/C+, которая содержит все 5 компонентов из списка выше, необходимых для сборки программы.
    Библиотека ASF предоставляет высокоуровневый интерфейс, единый для микроконтроллеров различных семейств и архитектур: megaAVR, AVR XMEGA, AVR UC3 и SAM. Библиотека ASF содержит примеры работы с различными периферийными блоками микроконтроллеров, а также с внешними устройствами, расположенными на различных оценочных платах.
    Такое разнообразие поддерживаемых микроконтроллеров отрицательно сказалось на легкости в освоении библиотеки ASF. Библиотека оказалась очень сложной, запутанной и большой по размеру (архив

    400 Мбайт, содержащий более 70000 файлов).
    Даже не смотря на то, что библиотеку ASF можно загрузить отдельно [8] и она рассчитана на использование в том числе и компилятора GCC, однако автор не сумел вручную выделить из библиотеки необходимые файлы для создания простейшей программы для микроконтроллера Atmel SAM4S16C.
    Автор предлагает такой путь:
    1.Чтобы получить минимальный компилируемый проект использовать интегрированную среду разработки Atmel Studio IDE, предназначенную для операционных систем Windows и основанную на среде Microsoft Visual Studio 2013.
    2. В дальнейшем «вручную» добавлять необходимые компоненты в полученный проект, копируя их из отдельно загруженной библиотеки ASF.

    Среда Atmel Studio IDE

    Среда Atmel Studio IDE поставляется бесплатно, загрузить ее можно с официального сайта [9 ]. Во время установки на компьютере или виртуальной машине под управлением Windows следует выбрать архитектуру ARM и указать необходимость установить библиотеку ASF (рис. 5).

    Рис. 5. Особенности установки Atmel Studio IDE.

    После установки следует запустить Atmel Studio IDE и создать новый проект, выбрав пункт меню «File -> New -> Project…». Далее следует выбрать тип проекта «GCC C ASF Board Project», как показано на рис. 6.

    Рис. 6. Выбор типа проекта в Atmel Studio IDE.

    Можно ввести название микроконтроллера, но в данном случае проще задать название оценочной платы. Для этого следует выбрать пункт «Select by Board» и выбрать название «SAM4S-EK» (рис. 7). В списке ниже следует выбрать появившийся пункт с наименованием микроконтроллера «ATSAM4S16C» и нажать «Ok».
    После того, как проект будет создан, файлы исходного кода будут размещены в указанном ранее (рис. 6) каталоге (в случае автора c:Usersandrey_kDocumentsAtmel Studio7.0GccBoardProject1GccBoardProject1src).
    Каталог src теперь можно перенести в операционную систему Linux в каталог проекта, например, в каталог

    Внимание следует обратить на расположение:

    1. Скрипт линковщика — это файл
    /sam/src/ASF/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld
  • Код начальной инициализации и таблица векторов прерываний находится в файле /sam/src/ASF/sam/utils/cmsis/sam4s/source/templates/gcc/startup_sam4s.c
  • Файл syscalls.c находится в каталоге Добавление модуля из библиотеки ASF

    На данный момент в проекте отсутствует компонент delay.h, необходимый для получения задержек на точно заданное время (это понадобится для «мигания» светодиодом). Далее показано, как по мере роста проекта добавлять необходимые компоненты из библиотеки ASF — на примере компонента delay.h. Чтобы его добавить, необходимо скопировать из отдельно загруженного архива библиотеки ASF [8 ] файл common/services/delay/delay.h и каталог со всеми файлами common/services/delay/sam/ в каталог проекта

    /sam/src/ASF/common/services/delay.
    Кроме этого необходимо включить компонент delay.h в сборку, добавив в конце файла

    Как видно, добавление отдельных компонентов из библиотеки ASF в проект не представляет больших трудностей.

    Код простейшей программы

    Листинг файла main.c приведен ниже:

    Функция board_init() инициализирует порты ввода/вывода (GPIO) микроконтроллера в соответствии с подключенными к ним внешними электронными компонентами, в том числе настраивает порты ввода/вывода как выходы для включения/выключения расположенных на плате светодиодов. Функция board_init() находится в файле src/ASF/sam/borads/sam4s_ek/init.c.
    Предоставлена возможность выбирать, какие порты будут проинициализированы, а какие нет — с помощью макроопределений в файле src/config/conf_borad.h.
    Функция sysclk_init() отвечает за инициализацию блока тактирования микроконтроллера. После сброса включается встроенный RC-генератор на 4 МГц [12 ]. Функция sysclk_init() активирует генератор, работающий от внешнего кварцевого резонатора на 12 МГц, а также настраивает блок фазовой автоподстройки частоты PLL, так, чтобы частота тактирования ядра микроконтроллера составляла 120МГц.
    Изменить настройки тактирования можно меняя значения макроопределений в файле src/config/conf_clock.h.
    Далее в бесконечном цикле последовательно вызываются функции включения и выключения светодиодов оценочной платы: LED_On() и LED_Off(). В качестве аргумента передается макроопределение LED1_GPIO, что соответствует зеленому светодиоду, подключенному к порту PA20. Функции LED_On(), LED_Off() и макроопределение LED1_GPIO определены в исходных файлах в каталоге src/ASF/sam/borads/sam4s_ek/, который содержит помимо прочего описание подключения светодиодов к выводам микроконтроллера.
    Вызов функции delay_ms(500), входящей в добавленный ранее модуль delay.h, приводит к задержке выполнения на 0,5 секунды. Задержка реализована пустыми циклами микроконтроллера, причем нет необходимости заботиться об учете частоты тактирования микроконтроллера — текущая частота учитывается внутри библиотеки ASF после вызова функции sysclk_init().

    Сборка с помощью системы автоматизации QBS

    Чтобы получить исполняемый файл прошивки необходимо выполнить компиляцию довольно большого количества файлов. Фирма Atmel предлагает пользоваться файлами makefile, которые представляют собой инструкции компилятору GCC.
    Автор же предлагает воспользоваться встроенной в Qt Creator средой автоматизации сборки QBS [1]. Для этого придется создать QBS файл проекта, содержащий сведения об исходных файлах, подлежащих компиляции.
    Одним из преимуществ QBS является то, что нет необходимости вручную вносить название каждого файла с исходным кодом в QBS файл — достаточно указать каталоги размещения файлов, остальное система сделает сама.

    Текст QBS файла

    В случае успешной release сборки (release — т.е. не для отладки, окончательной) QBS файл содержит предписания выполнить следующие действия:

    1. Вывести в консоль сборки размер прошивки,
    2. конвертировать файл прошивки из формата ELF в формат Intel HEX
    3. Загрузить файл в целевой микроконтроллер через адаптер SAM-ICE, используя программу OpenOCD
    Заключение

    В результате вышеприведенных действий создана экосистема для разработки под микроконтроллеры Atmel SAM4S, полностью состоящая из свободно распространяемых программ. Экосистему несложно модифицировать для использования другого ARM микроконтроллера фирмы Atmel.
    Загрузить готовый проект можно по адресу [11 ]. Для его использования понадобится операционная система Ubuntu или производная от нее (Lubuntu, Kubuntu, Xubuntu) с установленными пакетами:

    • инструментарий GCC для ARM микроконтроллеров [1]
    • среда разработки Qt Creator [1]
    • программа OpenOCD (установка описана выше)
    Литература
  • В поисках альтернативы Atmel Studio

    В поисках альтернативы Atmel Studio Atmel Studio

    Недавно вышла новая Atmel Studio версии 7.0. Как и все предыдущие IDE от Atmel, она не лишена ряда существенных недостатков:

    1. Отсутствие кроссплатформенности. Только Windows, причем, не ниже Windows 7
    2. Отсутствие поддержки популярных программаторов, JTAG-ов и т.д, только фирменные атмеловские инструменты
    3. Не умеет обновляться - каждую версию приходится ставить отдельно. Причем, если удалить предыдущую установленную версию, то может сломаться последняя.

    В качестве альтернативы студии можно использовать любой понравившийся текстовый редактор в связке с системой компиляции и сборки проекта.

    Для сборки проекта студия использует утилиту make и генерит makefile. В принципе, makefile можно писать руками, но это не совсем удобно и очень громоздко. Попытки использования разных известные аналогов make (cmake, scons и прочее) желаемого результата также не дали. Хотелось своего велосипеда - чего-то предельно простого, гибкого и удобного. В качестве основы был выбран Python, т.к. его легко использовать не только в качестве языка для написания системы сборки, но и в качестве удобного языка для написания сценариев компиляции.

    Утилита AVR builder

    Описание сценариев компиляции должно быть максимально простым - для сборки достаточно указать список исходных файлов, модель микроконтроллера и, как правило, его тактовую частоту. Так же хотелось иметь возможность собирать одной командой неограниченное множество различных прошивок (например, debug, release, прошивки для кварцевых резонаторов разных частот и т.д.)

    Минимальный файл конфигурации выглядит так:

    Этот файл сохраняется под именем make.builder в корень проекта. Утилита при запуске читает этот файл, создает директорию build и запускает компиляцию. В случае успеха будет создан файл прошивки build/my_project.hex.

    Дополнительно в файле конфигурации можно указать параметры программатора (используется avrdude), набор макросов препроцессора и опции компиляции.

    Теперь скомпилированную прошивку можно залить на устройство командой

    Кроме того, в этом примере определены макросы препроцессора, которыми можно задавать параметры сборки.

    При необходимости можно указать и параметры компиляции и сборки. По умолчанию билдер задает эти параметры так, чтобы на выходе получалась максимально компактная и оптимизированная прошивка. На моих примерах размер прошивки получался меньше, по сравнению с размером прошивки, собираемой Atmel Studio 7 для release-сборки с параметрами по умолчанию.

    Еще одна особенность утилиты - поддержка множества конфигураций. Их можно определять с помощью ассоциированного массива configurations. как это сделано в примере выше. Допустим, надо создать разные версии прошивок для разных устройств (с разной схемотехникой, частотой кварца, с разными возможностями и т.д.). Для этого добавляются секции конфигурации в которых определяются отличительные параметры сборки.

    соберёт все сборки и положит их в директорию build

    соберёт только сборки release и demo

    очистит содержимое каталога build, затем соберет сборку debug и запишет ее на устройство.

    Если в конфигурации конкретной сборки определен параметр, который уже определен в общей конфигурации (например, параметр “name”), то его значение будет взято из параметров сборки если параметр не является массивом. В случае массива значение параметра будет взято из объединения массивов общих параметров с параметрами сборки.

    Также можно добавить, что сборщик легко адаптировать для использования по другие микроконтроллеры и платформы.

    Сейчас утилита умеет собирать проекты из исходников на С и ассемблере (файлы с расширением .S). Работоспособность проверялась под Mac OS X и Windows. Сборщик пытается автоматически определить местоположение исполняемых файлов avrgcc. и если у него это не получилось (или получилось плохо), то путь к компилятору можно определить в переменной среды AVR_GCC_HOME (должна указывать на директорию c исполняемыми файлами avr-gcc. avr-objcopy. avr-objdump. avr-size и avrdude ).

    Выбор альтернативной IDE

    Что же касается текстового редактора, то перепробовав разные варианты я остановился на IDE NetBeans. Из коробки она умеет работать с файлами Си и ассемблера, запускать сборку с отображением ошибок компиляции и возможностью перехода в строке файла с ошибкой. Так же NetBeans имеет средства рефакторинга - можно, например, переименовывать переменные и методы в исходниках. В итоге, по удобству работы NetBeans, как мне показалась, превосходит AtmelStuidio. Правда, при работе в Windows в последней версии NetBeans замечено некоторое количество некритичных но неприятных багов.

    Вообщем-то почти аналогичными возможностями из коробки обладает IDE Eclipse CDT. Но тут, как минимум, все хуже а ассемблерными файлами - подсветка синтаксиса примитивнее и нет возможности перемещаться по объектам как по ссылкам (по крайней мере, на момент написания статьи).

    Еще можно использовать текстовые редакторы вроде Vim, Atom или Sublime, плагинизация которых позволяет получить вполне работоспособный инструмент, но это требует значительно большего количества времени и знаний. Лично мне наиболее простым показался Atom, в котором достаточно быстро удалось настроить сборку проекта с возможностью навигации по ошибкам/ворнингам и подсвечивания их в коде, но возможность рефакторинга отсутствовала.

    Под Mac OS X достаточно удобным показался Xсode - тут из коробки для Си-проектов у меня заработало все кроме рефакторинга.

    В качестве Makefile используется файл вида

    Проект утилиты-сборщика можно скачать с гитхаба: https://github.com/trol73/avr-make

    Программирование AVR в Linux - Научно-промышленная лаборатория Полюс

    Программирование AVR в Linux

    25 апреля 2013 года

    Введение

    Не секрет, что большая часть инженерного софта является коммерческой и работает исключительно в операционной системе Windows. Тем не менее и в Linux есть неплохие свободные программы, решающие многие практические задачи. В этой статье дан обзор технологии разработки программ для микроконтроллеров AVR при помощи свободного ПО, имеющегося в ОС ALT Linux.

    Готовим софт.

    Установим необходимые программы, набрав в консоли:
    su -
    password:
    apt-get install avr-gcc avr-libc avr-binutils avrdude

    Первые три программы это компилятор GCC для AVR с библиотеками, а четвертая - утилита программирования. Надо отметить, что в старых дистрибутивах ALT Linux (4-ая и 5-ая платформа) в avr-binutils была ошибка (компилятор не находил пути к заголовочным файлам). В 6-м Альте начиная с версии avr-binutils-2.21 эта ошибка исправлена [1]. Для проверки создадим в домашней папке текстовый файл main.c следующего содержания:

    Пробуем скомпилировать его под микроконтроллер ATMEGA16 набрав в консоли от имени пользователя:
    $ avr-gcc -mmcu=atmega16 -Os -o main.o main.c
    $ avr-objcopy -O ihex main.o main.hex

    Должны появится два файла: объектный main.o и файл прошивки main.hex.

    Программатор и отладочная плата.

    Чтобы залить прошивку в микроконтроллер Вам понадобится программатор. Лично я пользуюсь программатором для COM порта. Но можно собрать и USB программатор. Наиболее прост и дешев USBASP [2]. однако его придется где-то запрограммировать, а чтобы он работал устойчиво нужно после 1 контакта разъема USB поставить два диода, которые понизят напряжение питания микроконтроллера до 3,8 В.

    Для прототипирования схем удобно воспользоваться платой Pinboard. Помимо разной полезной периферии там имеется переходник USB/RS232 и бутлоадер от Мартина Томаса позволяющие загружать программы прямо по USB. У меня тоже есть такая плата, поэтому вкратце опишу ее запуск [3]. В консоли набираем команду:

    $ avrdude -p m16 -c avr109 -P /dev/ttyUSB0 -b 19200

    Затем жмем кнопку сброса на плате и сразу же вводим эту команду. Если все в порядке плата ответит:

    Connecting to programmer:
    Found programmer: Id = "AVRBOOT"; type = S
    Software Version = 0.8; No Hardware Version given.
    Programmer supports auto addr increment.
    Programmer supports buffered memory access with buffersize=128 bytes.
    Programmer supports the following devices:
    Device code: 0x75
    avrdude: AVR device initialized and ready to accept instructions
    Reading | ################################################## | 100% 0.00s
    avrdude: Device signature = 0x1e9403
    avrdude done. Thank you.

    Теперь можно изменить команду:
    $ avrdude -p m16 -c avr109 -P /dev/ttyUSB0 -b 19200 -U flash:w:main.hex

    и прошить в плату нашу тестовую программу. Ничего особенного не произойдет, лишь загорится зеленый светодиод подключенный к ножке PD7 O

    Конечно, пользоваться командной строкой не всегда удобно. Легче применить графическую оболочку AVRFuse. В ее настройках на вкладке Program выбираем Device Atmega16, в списке Programmer находим avr109, а на вкладке Settings пишем Port location /dev/ttyUSB0 и Baudrate 19200 Далее на вкладке Program выбираем Input file и наш файл с прошивкой, затем жмем кнопку сброса на плате, и сразу же кнопку Program.

    IDE для программирования на Си.

    К сожалению, в Linux нет программ, аналогичных по функциональности IDE Avr Studio. Существовал способ [4] позволяющий запустить ее под wine, но с тех пор скрипт winetricks несколько раз поменялся, часть библиотек была перемещена или переименована и, в общем, все тут довольно сложно. Есть avr-плагины для Eclipce и CodeBlock, но настройка их трудоемка, а особых удобств в отладке нету. Остается воспользоваться IDE KontrollerLab. Программа довольно аскетичная, но необходимый минимум функционала все же имеет.

    Устанавливаем ее:
    su -
    password:
    apt-get install kontrollerlab

    Сразу же закроем мешающее окошко терминала. Далее в главном меню Project выберем New Project, дадим ему имя и откроем. Следом File/New/C Source, присвоим имя исходнику. Переходим к свойствам проекта. Project/Configure project на вкладке Common выбираем настройки процессора CPU: Atmega16, clock 16 000 000. На вкладке Compiler ставим галку напротив -g: Produce debugging information. Чтобы отладка работала выберем Optimization level 0 (без оптимизации) и сохраним эти настройки как исходные Set as default.
    После отладки потребуется сменить уровень оптимизации на s (оптимизация по размеру) и повторно скомпилировать исходник.

    Скопируем в исходник наш тестовый файл main.c и скомпилируем его нажав Rebuild all. Для отладки выберем в главном меню Debug/PC only debugging затем Enable и Restart. Жмем кнопочку Step into и шагаем по строкам программы. Справа в окошке memory view показано содержимое ячеек ОЗУ и регистров. В списке выбираем нужный регистр, например DDRD, и смотрим как он меняется. Окошко можно убрать или восстановить в меню View/Show memory view.

    А вот значения именованных Си переменных посмотреть нельзя, да еще надо поискать, в какие ячейки памяти забросил их компилятор. Но можно определить вспомогательную регистровую переменную и копировать байты нужной переменной в нее. Для регистровых переменных разрешено брать регистры r2-r7 [5]. Пример:

    #include <avr/io.h>
    #define lo8(x) ((x)& 0xFF)
    #define hi8(x) ((x)>>8)
    register unsigned char l asm ( "r3" ) ;
    register unsigned char h asm ( "r4" ) ;

    int main ( void )
    <
    unsigned int test ;
    test = 0x110 ; l = lo8 ( test ) ; h = hi8 ( test ) ;
    DDRD |= 1 << 7 ;
    PORTD |= 1 << 7 ;
    PORTB = test ;
    test = 0x20 ; l = lo8 ( test ) ; h = hi8 ( test ) ;
    return 0 ;
    >

    Осталось настроить программирование. Идем в Project/Configure programmer. На вкладке Choose programmer выбираем галку Avrdude. Далее на вкладке Avrdude настроим наш программатор. Для Pinboard выберем Baud = 19200, Specify programmer type = Atmel AppNote AVR109 Boot Loader и Specify connection port Serial port = /dev/ttyUSB0
    Далее все просто, жмем сброс на плате и следом Upload (круглую синюю кнопку со стрелкой вверх) O.

    Терминальная программа.

    Чаще всего микроконтроллер и компьютер связываются по протоколу UART. Соответственно, понадобится преобразователь RS232/UART или USB/UART на FT232RL и терминальная утилита. В KontrollerLab она имеется (см. пункт меню View/Show serial terminal), но я предпочитаю программу Cutecom от Александра Нуендорфа. Ставим ее как обычно:

    # apt-get install cutecom

    Программа может посылать и принимать текстовые символы, строки и 16-ричные HEX числа и сохранять информацию в log файл, но работает лишь с первыми 4-мя COM портами /dev/ttyS0. /dev/ttyS3 .
    Если в компьютере нет COM порта и используется переходник USB/UART, то он опознается в Linux как устройство /dev/ttyUSB0.
    Чтобы сделать его виртуальным COM портом ttyS2 надо от рута скомандовать [6] :

    rm /dev/ttyS2
    ln -s /dev/ttyUSB0 /dev/ttyS2

    И на время текущего сеанса система будет видеть USB устройство как виртуальный COM порт.
    Чтобы не вводить каждый раз эти команды можно добавить их в скрипт автозапуска rc.local. Если его не существует, то создадим его с правами 755:

    # touch /etc/rc.d/rc.local
    # chmod 755 /etc/rc.d/rc.local

    И напишем в нем (не забыв добавить в конце файла пустую строку):
    #!/bin/sh
    rm / dev / ttyS2
    ln -s / dev / ttyUSB0 / dev / ttyS2
    exit 0

    Ассемблер.

    Для программирования AVR обычно используют стандартный ассемблер Atmel и, гораздо реже, ассемблер avr-gcc. Последний отличается запутанным синтаксисом, но его приходится использовать для ассемблерных вставок в Си код [7,8].
    Среди свободных ассемблеров наиболее близок к стандартному проект Avra, подробнее см [9]. Его установка в Alt Linux p6 обычная:

    # apt-get install avra

    Еще надо добавить файлы макроопределений (они находятся в архиве ) скопировав содержимое папки Asm1 в каталог /usr/share/avra
    У Atmel есть два варианта ассемблера. Хотя hex файлы будут безошибочно компилироваться для обоих вариантов, лучше использовать первый, иначе Avra засыплет предупреждениями "PRAGMA directive currently ignored".

    К сожалению, программной отладки в Avra нет, поэтому придется использовать ретро-технологию — текстовый редактор Geany + железный контроль (мигание светодиодами, посылка контрольных байт по UART).
    Настройка Geany для работы с Avra не сложная [10]. Сначала сделаем подсветку кода. Для этого скопируем в домашнюю папку в скрытую директорию

    /.config/geany/filedefs файл filetypes.asm с этой страницы. Затем в Geany в меню Сборка/Установить команды сборки в пункте Команды для языка: Файл Assembler в графе Скомпилировать пишем команду avra "%f"

    Далее создаем файл test.asm со следующим содержанием:

    И компилируем его нажав кнопку Скомпилировать текущий файл (на рисунке отмечена красной стрелкой).

    Geany может не только компилировать, но и записывать прошивку. Для этого в меню Сборка/Установить команды сборки в пункте Команды для языка: Файл Assembler жмем кнопку после цифры 2 и в появившемся окошке вводим _Сборка, а в поле Команда вводим команду прошивки.
    Для Pinboard она выглядит так: avrdude "%f" -p m16 -c avr109 -P /dev/ttyUSB0 -b 19200 -U flash:w:%e.hex
    В ней %f и %e - спецификаторы Geany, %f подставляет подставляет полное имя ассемблерного файла, а %e его имя без расширения. Для прошивки жмем кнопку Собрать текущий файл.

    Отладка программ на ассемблере.

    Как уже говорилось применяем ретро-технологию; текстовый редактор + посылка контрольных байт по uart. Подключим микроконтроллер к переходнику rs232/uart или usb/uart и поместим в конце отлаживаемого кода две процедуры: uart_init (инициализация uart) и uart_snt (передача байта). Чтобы посмотреть значение какого-нибудь регистра (обозначим его псевдонимом xreg) пишем команды:

    Вот пример отладочного кода (взято у Ревича и Ди Хальта O ):

    Прошиваем микроконтроллер, запускаем Cutecom и открываем порт. Затем подаем питание на микроконтроллер и в окне терминала побегут строки с символами "A". Все работает, но на практике, для устойчивой работы протокола UART символы лучше передавать не сразу друг за другом, а с некоторой задержкой.

    Выводы.

    Таким образом программирование микроконтроллеров AVR в ALT Linux вполне решаемая задача.
    Желаю Вам творческих успехов!

    Ссылки. Комментарии

    #1. 18 мая 2013 года, 01:47. Dion пишет:

    Спасибо за статью! KontrollerLab только с C работает? Ассемблер не поддерживает?

    #2. 18 мая 2013 года, 11:54. Андрей пишет:

    Поддерживается gnu ассемблер avr-gcc. Но он неудобный, чтобы использовать символические имена регистров нужно весь текст замусорить макросами подстановки _SFR_IO_ADDR и не разобрался, как располагать в нем байты данных по фиксированным адресам (наподобие .org .db .dw в атмеловском ассемблере).

    Еще в ассемблере avr-gcc есть любопытная бага. Чтобы использовать _SFR_IO_ADDR ассемблерный файл обязательно должен иметь расширением большую букву S, если будет маленькая s происходит ошибка компиляции.

    ;led.S
    #include <avr/io.h>
    sbi _SFR_IO_ADDR(DDRB), 2
    sbi _SFR_IO_ADDR(PORTB), 2

    led.S компилируется, а led.s нет:

    [andrew@localhost bags]$ avr-gcc -c -mmcu=attiny44 -o led.out led.s
    led.s: Assembler messages:
    led.s:3: Error: constant value required
    led.s:3: Error: `,' required
    led.s:3: Error: constant value required
    led.s:3: Error: garbage at end of line
    led.s:4: Error: constant value required
    led.s:4: Error: `,' required
    led.s:4: Error: constant value required
    led.s:4: Error: garbage at end of line

    [andrew@localhost bags]$ avr-gcc -c -mmcu=attiny44 -o led.out led.S
    [andrew@localhost bags]$ avr-objcopy -j .text -O ihex led.out led.hex

    В File/New Kontrollerlab создается ассемблерный файл с маленькой s. Поэтому, чтобы нормально работать с ассемблером лучше cоздать пустой проект, затем в блокноте пустой файл с расширением S и уже после открыть его в контроллерлабе.

    #3. 18 мая 2013 года, 14:24. Dion пишет:

    Понятно. Спасибо. Останусь на Geany с avra. Хардкор, так хардкор)

    Оставьте свой комментарий