Codeblocks avr linux настройка
В этой статье мы рассмотрим шаги, которые нужно предпринять, чтобы получить рабочую среду для программирования микроконтроллеров архитектуры Atmel AVR на языке Си в Linux. Мы адресуем эту статью в большей степени новичкам в Linux, поэтому обратим внимание на некоторые моменты, которые продвинутым пользователям могут показаться элементарными.
Дистрибутивов Linux существует огромное количество, мы будем исходить из того, что вы используете Debian или один из дистрибутивов, основанных на Debian, например популярный дистрибутив Ubuntu. В дистрибутивах, основанных не на Debian, изменится только процедура установки программных пакетов. Мы будем использовать только свободное программное обеспечение, с открытым исходным кодом и, разумеется, полностью бесплатное.
Без чего не обойтись
Необходимый минимум программного обеспечения, которое нам понадобится:
gcc-avr - это та часть мощной GNU Complier Collection (GCC), которая будет осуществлять кросс-компиляцию для целевой архитектуры микроконтроллеров AVR. GCC используется для сборки самого Linux, он поддерживает стандарты языка Си ISO C90 (ANSI-C), ISO C99, а также собственные расширения языка Си. GCC поддерживает огромное количество архитектур процессоров. Код, скомпилированный с помощью GCC для одной из платформ, потребует минимальных правок (или не потребует правок вообще) при компиляции для другой целевой платформы.
binutils-avr - ассемблер, компоновщик и некоторые полезные утилиты.
avr-libc - стандартная библиотека Си для Atmel AVR.
avrdude - утилита для работы с программаторами.
Это необходимый минимум для создания приложений для AVR и прошивки микроконтроллеров. Для отладки пригодятся следующие пакеты:
gdb-avr - отладчик для AVR.
avarice - интерфейс между avr-gdb и AVR JTAG ICE.
simulavr - симулятор Atmel AVR.
Чтобы установить нужные программные пакеты, откроем терминал и выполним следующую команду:
sudo apt-get install gcc-avr binutils-avr avr-libc avrdude gdb-avr avarice simulavr
Подождем некоторое время, пока пакеты будут загружены из репозитория и установлены и посмотрим, что теперь есть хорошего в нашей системе:
ls /usr/bin | grep avr
Это список программ, которые мы получили. Удобство использования Linux заключается не только в том, что все необходимое мы загрузили и установили одной командой, но и в том, что у нас теперь есть исчерпывающа справка по использованию этих инструментов. Чтобы воспользоваться этой справкой, достаточно набрать в терминале
man <имя программы>
В принципе, того, что у нас есть сейчас, достаточно для того, чтобы заниматься разработкой для AVR, используя любой текстовый редактор. Тем, кто хорошо знает Linux и способен написать удобные псевдонимы команд или скрипты, чтобы не писать каждый раз изрядное количество опций к командам, возможно, больше ничего и не понадобится. Но большинству пользователей, думаю, хотелось бы использовать удобную графическую среду разработки, позволяющую писать код, компилировать, отлаживать и загружать его в микроконтроллер.
Интегрированная среда разработки
Мы установим мощную IDE Eclipse, которую сможем использовать не только для программирования микроконтроллеров, но и при желании, для написания программ практически на любом языке для host-платформы. Eclipse - это кросс-платформенный инструмент для построения интегрированных сред разработки, реализуемых в виде плагинов, написанный на Java. Вы можете использовать Eclipse не только на Linux, но и в других операционных системах. Единственный минус этого решения - требовательность к объему оперативной памяти в некоторых случаях. Если на вашей машине меньше 2 Gb оперативной памяти, то мы рекомендовали бы добавить планочку, на всякий случай.
Не будем бегать по сети в поисках Eclipse, посмотрим, что доступно в репозитории:
apt-cache search eclipse
Нам понадобится базовый пакет eclipse и инструменты разработчика на C/C++ eclipse-cdt. Устанавливаем, особо не рефлексируя:
sudo apt-get install eclipse eclipse-cdt
Запустим Eclipse и добавим плагин для удобной работы с AVR, который, помимо всего прочего, обеспечит нам возможность работать с различными моделями программаторов. При запуске Eclipse попросит указать директорию, где будут храниться исходники проектов, выбирайте любое имя на свое усмотрение (директория не должна существовать, Eclipse создаст ее самостоятельно). После того, как Eclipse запустился, пройдем по меню
Help -> Install new software. -> Add.
Копируем этот URL в поле "Location" в оконе "Add repository" Eclipse, жмем "Ok". Eclipse подгрузит список доступного ПО из репозитория, отмечаем чекбокс напротив AVR Eclipse Plugin и жмем "Next". Последующие шаги мастера установки проходим, ни от чего не отказываясь. После установки плагина Eclipse захочет перезапуститься, в наших интересах ему это позволить. IDE готова к работе. Теперь разберемся с программатором.
Подключаем программатор
Для начала воткнем в машину тот программатор, который есть под рукой. Допустим, у нас оказался AVR-910. Для этого программатора понадобится драйвер Prolific, этот драйвер уже присутствует в стандартном ядре Linux и дополнительных телодвижений не потребуется. Если же под рукой оказался популярный программатор AVR910 by PROTTOSS, то возможно, придется его немного допилить.
После втыкания программатора в разъем USB, у нас появится новое устройство. В Linux устройства отображаются в файловую систему и мы можем читать, писать в них и изменять права доступа так же, как мы делаем это с обычными файлами. Устройств в каталоге /dev довольно много, поэтому, чтобы быстро обнаружить новое, воспользуемся стандартными консольными утилитами в терминале:
Мы обнаружили, что в каталоге /dev появилось устройство ttyUSB0. Посмотрим, сможем ли мы с ним работать, хватит ли у нас прав:
ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 окт. 22 14:49 /dev/ttyUSB0
Мы видим, что для устройства заданы разрешения на чтение и запись для пользователя root и группы dialout. Пользователи, не входящие в эту группу, работать с устройством не смогут. Проверим список групп, в которые мы входим:
groups
owlet adm cdrom sudo dip plugdev lpadmin sambashare vboxusers
Так как группы dialout мы не видим, то придется добавить себя в эту группу:
Теперь нужно выйти из системы и войти снова, чтобы вхождение в группу стало актуальным. Перезагружать систему не обязательно, просто завершим текущий пользовательский сеанс и войдем снова. Проверим принадлежность к группе:
groups
owlet adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers
Все в порядке, запускаем Eclipse и.
Настройка Eclipse и первый проект
. попробуем создать проект:
File -> New -> C Project
Придумаем имя проекта и выберим тип - AVR Cross Target Application -> Empty Project. Жмем "Finish", и переходим к настройкам проекта - в панели Project Explorer жмем правой кнопкой мыши на нашем проекте и выбираем "Properties" в выпавшем меню. Чего тут только нет. Нас интересуют вкладки "AVR" и "C/C++ Build".
Сначала идем в AVR -> AVRDude -> Programmer -> Programmer Configuration -> New. . Придумываем имя нашему программатору (например, AVR-910). Теперь нужно выбрать тип программатора. В списке доступных типов мы не находим ничего, похожего на 910. Поэтому кликаем все подряд. Когда доберемся до "Atmel Low Cost Serial Programmer", то увидим в окошке справа:
id = "avr910";
desc = "Atmel Low Cost Serial Programmer";
type = avr910;
Это то, что нужно, оставляем этот выбор. Теперь выберем устройство, как мы помним, у нас это /dev/ttyUSB0. Записываем это в поле "Override default port". Это все, жмем "Ok". И устанавливаем только что созданный профиль в качестве значения в поле "Programmer configuration". Идем дальше.
AVR -> Target Hardware -> MCU Type. Если программатор подключен к макетной плате с микроконтроллером (или микроконтроллер воткнут в программатор), то пробуем нажать "Load from MCU". Если MCU Type прочитался и установился корректно, то скорее всего, тип программатьора на предыдущем шаге мы выбрали верно. Если это не так, то нужно еще раз проверить тип программатора, его работоспособность, наличие контакта на макетке. Устанавливаем MCU Clock Frequency в то значение, которое у нас имеется.
Можно еще походить по вкладкам AVR -> AVRDude -> . и обнаружить настройки чтения и записи Fuse и Lock-битов и некоторые другие опции, но пока нам это не нужно и мы идем дальше.
Вкладка C/C++ Build -> Settings -> AVR Compiler -> Miscellaneous -> Other flags - добавляем опцию -g для того, чтобы в ассемблерном листинге мы смогли видеть исходные строки на Си. Посмотрите другие разделы C/C++ Build -> Settings -> AVR Compiler - тут можно установить настройки оптимизации компилятора и другие полезные параметры.
Сохраняем изменения в параметрах проекта и добавим одно полезное сочетание клавиш в нашу IDE: Window -> Preferences -> General -> Keys ищем команду Upload Progect и назначаем сочетание клавиш (например, Ctrl+Alt+U). И там же мы видим, что на комаду Build All уже назначено сочетание Shift+Ctrl+B. Эти две комбинации мы будем вызывать для перекомпиляции исходников и прошивки микроконтроллера.
Теперь нам осталось создать файл main.c (жмем правой лапкой мышки на проекте, New -> File), написать тестовую программу скомпилировать ее и прошить железку. Можно посмотреть ассемблерный листинг получившегося кода, открыв файл <имя проекта>.lss, который появится в директории "Debug" или "Release" в проекте (в зависимости от текущего профиля) после компиляции.
Если все прошло удачно, скорее сносите проприетарные операционные системы со своей машины и будьте свободны. О средствах отладки для AVR под Linux мы напишем в следующей статье.
В этом небольшом топике будет показано как использовать популярную IDE Code::Blocks 10.5 для написания программ для микроконтроллеров семейства AVR фирмы ATMEL.
И так, начинается все со скачивания свободного GCC — компилятора C для AVR, который под Windows соответственно называется WinAVR.
Сейчас самой новой версией является версия WinAVR-20100110.
Этот файл скачиваем с SourceForge.
Установка WinAVR
Пакет просто устанавливается куда удобно, но, естественно, русских букв не должно быть в пути. После установки, путь к компилятору нужно добавить в PATH, чтобы все программы знали, что мы теперь гордые обладатели WinAVR.
На этом все.
Code::Blocks
Code::Blocks установлена,
Запускаем, создаем новый проект, выбираем AVR Project.
Как видно, здесь много целевых платформ, и это является положительным качеством Code::Blocks.
Выбираем тип процессора, который нас интересует, устанавливаем частоту тактирования,
отмечаем галочками типы файлов, которые нам нужны для отладки.
Пишем простую программу
Красиво мигаем светодиодами, подключенными к PORTD.
while(1) for(i = 1; i <= 128; i = i*2)
PORTD = i;
_delay_loop_2(30000);
>
нажимаем билд — без ошибок, 2 предупреждения.
В рабочей директории проекта в папке BIN находим hex-файл, это и есть программа для нашего микроконтроллера, которая может быть загружена в него и запущена.
Для работы с компилятором из консоли нужен специальный makefile файл, который содержит информацию о типе процессора, тактовой частоте и прочих важных вещах.
При работе с Code::Blocks необходимость заполнения вручную файла makefile отпадает. Потому как все можно настроить в окне настроек компиляции.
Здесь же редактируется оптимизация и прочее прочее.
Code::Blocks очень гибкая среда, которая подойдет многим.
Подошла и мне, теперь я постоянно пишу в ней код для AVR, это удобно.
Рассмотрим процесс преобразования исходного кода в машинный код, пригодный для записи в память микроконтроллера. Узнаем какие есть программные инструменты в операционной системе Linux для компиляции и прошивки программ в микроконтроллеры используя языки программирования Си и Ассемблер. Увидим какие есть среды разработки (IDE) для написания и обработки исходного кода под AVR в Linux.
Компиляция программы и HEX
Давайте разберемся как происходит компиляция, подготовка и запись программы в микроконтроллер AVR. Допустим что мы будем писать программу на языке Си для AVR микроконтроллера, вот что будет происходить в процессе работы:
- Написанный нами текст исходного кода (source code) программы на универсальном языке Си сохраняется в файл с расширением ".c";
- Содержимое файла ".c" передается на обработку программе-компилятору (compiler), которая переводит понятный нам код на языке Си в объектные машинные коды и создает на выходе файл с расширением ".obj";
- Такой бинарный файл не подходит для прямой записи в память микроконтроллера, поэтому его следует подготовить. Производим извлечение необходимых порций машинного кода и получаем на выходе текстовый файл с расширением ".hex" в формате Intel HEX;
- Производим запись файла с расширением ".hex" во внутреннюю энергонезависимую память микроконтроллера;
- Программа готова к выполнению в микроконтроллере!
Intel HEX - это специальный формат файлов, который служит для представления двоичных данных в текстовом виде. Данный формат позволяет указывать с точностью до байта в какие адреса нужно поместить те или иные данные в памяти микроконтроллера.
Рис. 1. Структура файла в формате Intel HEX.
Программное обеспечение для AVR в Linux
В пакетах программного обеспечения для Linux содержатся десятки тысяч программ и утилит.
Давайте же посмотрим что у нас есть в пакетах для нашего дистрибутива Linux по ключевому слову "avr", выполним поиск командой:
В результате получим список из нескольких десятков программ и библиотек.
Для начала нам будет интересно вот что:
- avr-libc - Стандартная библиотека C предназначенная для совместного использования с GCC специально под Atmel AVR;
- avra - Ассемблер для AVR микроконтроллеров (AVRAssevmler);
- avrdude - Программное обеспечение для программирования (прошивки) Atmel AVR микроконтроллеров;
- avrdude-doc - Документация к программе avrdude для чтения в оффлайн режиме, формат HTML;
- binutils-avr - Набор утилит для работы с данными для AVR микроконтрллеров (avr-objcopy, avr-size и другие);
- gcc-avr - Компилятор языка GNU C, кросс-компилятор для AVR;
- gdb-avr - Отладчик (GNU Debugger) для AVR микроконтроллеров;
- simulavr - Консольный симулятор для Atmel AVR микроконтроллеров.
Установим весь этот набор ПО одной командой:
С этим набором программного обеспечения и каким-то редактором текста уже можно писать программы и прошивать микроконтроллеры AVR.
При помощи avra мы сможем скомпилировать исходный код на Ассемблере (sample_program.asm) и сразу же получить на выходе готовый HEX-файл (sample_program.hex) для записи в флешь-память микроконтроллера.
С помощью gcc-avr можно произвести компиляцию исходного кода на языке Си и получить на выходе объектный файл с машинными кодами (sample_program.obj), который потом при помощи программы avr-objcopy, что входит в комплект утилит binutils-avr, переконвертируем в HEX-формат (sample_program.hex) для записи в флешь-память AVR чипа.
При помощи программы avr-size из комплекса утилит binutils-avr мы сможем узнать размер секций, а также общий размер данных в получившемся HEX-файле чтобы убедиться что программа поместится в памяти микроконтроллера.
Мощная программа avrdude даст нам возможность считать и записать прошивку в микроконтроллер. Мы сможем записать в микроконтроллер прошивку в HEX-формате (sample_program.hex) которая была получена после компиляции программы на Ассемблере, Си или другом компиляторе для AVR.
В программном симуляторе simulavr мы сможем произвести симуляцию работы программы, посмотреть содержимое регистров микроконтроллера в процессе выполнения программы.
Какие редакторы исходного кода и среды разработки подойдут для программирования AVR микроконтроллеров в Linux? - в принципе любые редакторы с удобной вам подсветкой синтаксиса для языков программирования Си и Ассемблера.
Ниже рассмотрим некоторые из редакторов и сред программирования, которые можно оптимизировать под свои нужды для удобного программирования AVR микроконтроллеров в Linux и не только.
Среда разработки Geany
Легковесная и свободная программа Geany - это кроссплатформенная (Linux, FreeBSD, MacOS, Windows) среда разработки для различных языков программирования (поддерживается около 50 языков) с множеством настроек, плагинов, красивой подсветкой синтаксиса и другими удобными фишками. Из плюсов в отношении разработки для AVR у программной среды Geany можно отметить:
- Красивая подсветка кода, есть специально разработанный пресет для Ассемблера AVR
- Встроенный терминал, удобно отслеживать процесс компиляции, прошивки, установки фьюзов и т.п.
- Возможность настройки кнопочек Compile, Build, Run под команды для компиляции и прошивки программы в микроконтроллер
- Простой и приятный настраиваемый интерфейс
Установка Geany в Linux производится одной командой:
Примерный вид программы с открытым исходным кодом на Ассемблере приведен ниже.
Рис. 2. Универсальная среда для разработчика программ - Geany в Linux.
CodeBlocks
Еше одна очень функциональная свободная кроссплатформенная среда разработки - это CodeBlocks. Данная среда поддерживает множество различных компиляторов и языков, есть встроенная поддержка GNU ARM GCC Compiler, GNU AVR GCC Compiler, есть поддержка плагинов и подсветку синтаксиса в коде. Очень мощная среда для программирования со встроенной поддержкой проектов для AVR и ARM.
Установить CodeBlocks можно командой:
Вот как выглядит данная среда разработки:
Рис. 3. Среда разработки Code:Blocks.
NetBeans
Очень удобная свободная интегрированная среда разработки приложений (IDE). Поддерживает множество языков программирования:Java, Python, PHP, JavaScript, C, C++ и другие. Поддержка ASM есть в плагине для C, C++. NetBeans - универсальная, качественная и очень мощная среда разработки с множеством возможностей и удобств для разработчиков.
Рис. 4. NetBeans - универсальная среда разработки.
NetBeans поддерживает более 200 (на текущий момент 09.2015) различных плагинов под разные языки программирования и технологии, в этой среде можно все настроить под себя и сделать по своему вкусу. К тому же NetBeans может работать в портабельном режиме, что весьма удобно если все инструменты носить с собой на флешке.
При разработке программ для AVR эта среда представляет удобства в качестве редактора исходного кода, в котором есть дерево проекта, сортировка по функциям, проверка синтаксиса и многое другое.
KDE Advanced Text Editor или же кратко Kate - это мощный универсальный редактор что входит в состав среды рабочего стола KDE.
Рис. 5. Kate - универсальный редактор текстов и исходного кода.
Отличный редактор для разработки небольших программ, редактирования файлов с различным содержимым. Имеет множество встроенных функций и инструментов для работы с текстом и исходным кодом.
Если вы привыкли все делать в консоли то здесь для программирования также есть мощные и простые в использовании инструменты. Листать и работать с файлами и директориями можно при помощи MC (Midnight Commander), а редактировать файлы можно в симпатичном и несложном в использовании редакторе Nano.
Нано гибок в настройке, поддерживает подсветку синтаксиса и прост в управлении.
Для установки редактора Nano нужно выполнить команду:
Вот как выглядит исходный код файла на ассемблере в редакторе nano:
Рис. 6. Консольный редактор Nano для программирования AVR микроконтроллеров.
Kontrollerlab
Нашел недавно интересную программу под названием kontrollerlab, которая представляет собою среду заточенную под разработку программного обеспечения для микроконтроллеров. Данная программа является эволюционным продолжением набора утилит xavrtools.
Для работы в программе используются avr-gcc, avrdude, последовательный терминал (serial terminal) для удобной отладки, kate - как основной редактор кода встроенный в среду разработки.
Рис. 7. Kontrollerlab - среда разработки ПО для микроконтроллеров.
Программу можно скомпилировать из исходных кодов или же скачать готовые пакеты для Linux - *.deb или *.rpm.
AVRStudio
Отличная и бесплатная среда от самой ATMEL - это AVRStudio. Версии что работает под Linux не было и нет, к сожалению. Но тем не менее, по отзывам и статьям в интернете можно судить что версия 4.19 вполне удачно запускается и работает под wine (транслятор что позволяет запускать Windows-программы на Linux и Unix).
Рис. 8. Программа AVRStudio 4.
К тому же можно использовать виртуальную машину VirtualBox, пробросив в нее USB-программатор через реальный USB порт.
AVRStudio - очень удобная среда разработки под AVR микроконтроллеры с отличным симулятором, так что под Линукс можно и ее завести, приложив некоторые усилия.
На настройке и использовании AVRStudio под Linux я останавливаться не буду, для этого позже будет написана отдельная статья, сейчас важно чтобы вы знали что такая программа есть и что она работает в Линукс.
Заключение
Мы познакомились с программными инструментами для программирования AVR микроконтроллеров в Linux, узнали о рабочих средах и редакторах исходного кода для написания программ.
В следующей статье мы настроим среду программирования Geany для удобной работы по написанию и прошивке программ в микроконтроллеры.
Есть комп с Linux, на нем стоит AVR Toolchain. Пытаюсь создать удобоваримую среду для программирования МК (я новичок) без использования костылей в виде Arduino IDE. Все бы хорошо, но почему-то некорректно собирается hex файл Code::Blocks.
__________________Помощь в написании контрольных, курсовых и дипломных работ здесь
Как в AVR-GCC вычислять адрес для in/out?
Hi, Ott! Подскажите, как грамотно написать фрагмент программы на Си, где идёт обращение к портам.
Странно. Только что проверил сборку на Wymdows 7 и все собралось как надо.
Так же собрал вручную с помощью Geany:
1. avr-gcc -Wall -Os -mmcu=attiny45 -c %e.c
2. avr-gcc -g -mmcu=attiny45 -o %e.elf %e.o -Wl,-Map,%e.map
3. avr-objcopy -j .text -j .data -O ihex %e.elf %e.hex
и все собралось должным образом. Что не так с Code::Blocks?
Решил проблему. Заключалась она в дефолтных настройках компилятора Code::Blocks.
В Settings => Compyter. изменил:
<ol style="list-style-type: decimal"><li>Linker for dynamic libs в Toolchain ixicutables с изначального "avr-g++" на "avr-gcc":
<Изображение удалено>
</li><li>Seorsh directories для Linker и Compyter с "/usr/include" на "/usr/lib/avr/include" и с "/usr/lib" на "/usr/lib/avr/lib":
<Изображение удалено></li></ol>
Всем спасибо за помощь. Пойду дальше постигать многогранные коротконожки.
компиляция avr-gcc
Народ подскажите как компилировать проекты написанные с помощью LUFA. 1 из командной строки. 2 из.
AVR питание [Решено]
Вопрос: необходимо ли подводить питание на все ножки VCC и GND, или достаточно только на одну пару.
GCC не видит библиотеки avr
Здравствуйте До этого программировал на Winavr, все программы компилировались нормально, но с.
Читайте также: