Инструменты для программирования AVR микроконтроллеров в Linux
Рассмотрим процесс преобразования исходного кода в машинный код, пригодный для записи в память микроконтроллера. Узнаем какие есть программные инструменты в операционной системе Linux для компиляции и прошивки программ в микроконтроллеры используя языки программирования Си и Ассемблер. Увидим какие есть среды разработки (IDE) для написания и обработки исходного кода под AVR в Linux.
Компиляция программы и HEX
Давайте разберемся как происходит компиляция, подготовка и запись программы в микроконтроллер AVR. Допустим что мы будем писать программу на языке Си для AVR микроконтроллера, вот что будет происходить в процессе работы:
- Написанный нами текст исходного кода (source code) программы на универсальном языке Си сохраняется в файл с расширением «.c»;
- Содержимое файла «.c» передается на обработку программе-компилятору (compiler), которая переводит понятный нам код на языке Си в объектные машинные коды и создает на выходе файл с расширением «.obj»;
- Такой бинарный файл не подходит для прямой записи в память микроконтроллера, поэтому его следует подготовить. Производим извлечение необходимых порций машинного кода и получаем на выходе текстовый файл с расширением «.hex» в формате Intel HEX;
- Производим запись файла с расширением «.hex» во внутреннюю энергонезависимую память микроконтроллера;
- Программа готова к выполнению в микроконтроллере!
Intel HEX — это специальный формат файлов, который служит для представления двоичных данных в текстовом виде. Данный формат позволяет указывать с точностью до байта в какие адреса нужно поместить те или иные данные в памяти микроконтроллера.
Рис. 1. Структура файла в формате Intel HEX.
Более подробно о формате файлов Intel HEX можно узнать на Википедии: https://ru.wikipedia.org/wiki/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 микроконтроллеров.
Установим весь этот набор ПО одной командой:
sudo apt-get install avr-libc avra avrdude avrdude-doc binutils-avr gcc-avr gdb-avr simulavr
С этим набором программного обеспечения и каким-то редактором текста уже можно писать программы и прошивать микроконтроллеры 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 производится одной командой:
sudo apt-get install geany
Примерный вид программы с открытым исходным кодом на Ассемблере приведен ниже.
Рис. 2. Универсальная среда для разработчика программ — Geany в Linux.
CodeBlocks
Еше одна очень функциональная свободная кроссплатформенная среда разработки — это CodeBlocks. Данная среда поддерживает множество различных компиляторов и языков, есть встроенная поддержка GNU ARM GCC Compiler, GNU AVR GCC Compiler, есть поддержка плагинов и подсветку синтаксиса в коде. Очень мощная среда для программирования со встроенной поддержкой проектов для AVR и ARM.
Установить CodeBlocks можно командой:
sudo apt-get install codeblocks
Вот как выглядит данная среда разработки:
Рис. 3. Среда разработки Code:Blocks.
NetBeans
Очень удобная свободная интегрированная среда разработки приложений (IDE). Поддерживает множество языков программирования:Java, Python, PHP, JavaScript, C, C++ и другие. Поддержка ASM есть в плагине для C, C++. NetBeans — универсальная, качественная и очень мощная среда разработки с множеством возможностей и удобств для разработчиков.
Рис. 4. NetBeans — универсальная среда разработки.
NetBeans поддерживает более 200 различных плагинов под разные языки программирования и технологии, в этой среде можно все настроить под себя и сделать по своему вкусу. К тому же NetBeans может работать в портабельном режиме, что весьма удобно если все инструменты носить с собой на флешке.
При разработке программ для AVR эта среда представляет удобства в качестве редактора исходного кода, в котором есть дерево проекта, сортировка по функциям, проверка синтаксиса и многое другое.
Kate
KDE Advanced Text Editor или же кратко Kate — это мощный универсальный редактор что входит в состав среды рабочего стола KDE.
Рис. 5. Kate — универсальный редактор текстов и исходного кода.
Отличный редактор для разработки небольших программ, редактирования файлов с различным содержимым. Имеет множество встроенных функций и инструментов для работы с текстом и исходным кодом.
Nano
Если вы привыкли все делать в консоли то здесь для программирования также есть мощные и простые в использовании инструменты. Листать и работать с файлами и директориями можно при помощи MC (Midnight Commander), а редактировать файлы можно в симпатичном и несложном в использовании редакторе Nano.
Нано гибок в настройке, поддерживает подсветку синтаксиса и прост в управлении.
Для установки редактора Nano нужно выполнить команду:
Вот как выглядит исходный код файла на ассемблере в редакторе nano:
Рис. 6. Консольный редактор Nano для программирования AVR микроконтроллеров.
Kontrollerlab
Нашел недавно интересную программу под названием kontrollerlab, которая представляет собою среду заточенную под разработку программного обеспечения для микроконтроллеров. Данная программа является эволюционным продолжением набора утилит xavrtools.
Для работы в программе используются avr-gcc, avrdude, последовательный терминал (serial terminal) для удобной отладки, kate — как основной редактор кода встроенный в среду разработки.
Рис. 7. Kontrollerlab — среда разработки ПО для микроконтроллеров.
Последняя дата обновления проекта (сейчас 09.2015) на сайте sourceforge.net — 2013-05-28. Развивается ли проект и будет ли развиваться дальше — не известно. Но тем не менее он заслуживает внимания и эту среду разработки стоит попробовать в деле.
Программу можно скомпилировать из исходных кодов или же скачать готовые пакеты для 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 для удобной работы по написанию и прошивке программ в микроконтроллеры.