Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Настройка Geany в Linux для программирования AVR микроконтроллеров

Узнаем как настроить среду программирования Geany для разработки программ под AVR микроконтроллеры на языках C (Си) Assembler (Ассемблер). Кратко рассмотрим структуру команд для компиляции, сборки и прошивки программы в микроконтроллер.

Содержание:

  1. Подготовка
  2. Настройка Geany для AVR Ассемблера
  3. Настройка Geany для AVR Си
  4. Заключение

Подготовка

Думаю что для начала наиболее подходящей и простой средой для разработки под чипы AVR является Geany. Позже можно попробовать и другие программы, часть из которых была рассмотрена в предыдущей статье, и потом уже самому выбрать ту которая вам подходит больше всего. К тому же никто не мешает использовать несколько сред для разработки вместе, распределяя между ними задачи. Здесь выбор за вами!

Итак, вы уже установили Geany, перейдем к настройке данной среды для удобной разработки программ, но прежде разберемся с встроенным терминалом.

В прошлой статье на рисунке 2, где изображен скриншот Geany, снизу слева нет вкладки с названием "Terminal", если у вас также нет терминала то для появления возможности использовать терминал в Geany необходимо установить пакет libvte9:

sudo apt-get install libvte9

Дальше мы настроим среду Geany для удобной компиляции и прошивки микроконтроллера при программировании на языках C и Assembler.

Настройка Geany для AVR Ассемблера

Для улучшенной подсветки синтаксиса AVR Ассемблера выполним команду, которая скачает с оффициального сайта документации шаблон синтаксиса для asm-файлов и сохранит его в домашней директории с настройками для Geany:

wget http://wiki.geany.org/_export/code/config/avr_asm -O ~/.config/geany/filedefs/filetypes.asm

Откроем для редактирования в среде Geany какой-нибудь файл с расширением ".asm", можно создать пустой и открыть его. Теперь идем в меню Build - Set Build Commands, откроется окно с настройками для кнопок компиляции, сборки и выполнения. Заполним поля для команд как представлено на рисунке ниже:

Настройка Geany для AVR ASM

Рис. 1. Настройка Geany для компиляции и прошивки микроконтроллеров используя язык AVR Assembler.

Здесь все просто, для каждой из кнопок мы указываем какие из команд нужно выполнять:

  • avra --includepath /usr/share/avra/ "%f"   - компилируем ASM файл, указав папку c INC-файлами для AVR чипов;
  • avr-size %e.hex   - смотрим статистику по размеру получившегося HEX-файла;
  • avrdude -c usbasp -p m8 -P usb -U flash:w:%e.hex   - прошиваем микроконтроллер ATmega8 (ключ -p m8) при помощи программы avrdude.

Сочетание символов "%f" - означает подстановку полного имени открытого файла (например my_program.c), а сочетание символов "%e" - подстановку только имени файла без расширения (например my_program).

Если у вас микроконтроллер другого типа то в команде прошивки для avrdude нужно указать соответствующий ключ -p (partno) с типом вашего микроконтроллера. Узнать значение опции для вашего микроконтроллера можно на страничке документации avrdude: http://www.nongnu.org/avrdude/user-manual/avrdude_4.html

В качестве программатора я использую USB ASP, поэтому если вы используете другой программатор то опция "-c usbasp" должна быть изменена. Список поддерживаемых программаторов и значений опций для avrdude приведены на справочной странице: http://www.nongnu.org/avrdude/user-manual/avrdude_12.html .

Более подробно программу avrdude, ее опции, а также использование с программаторами на онове COM или LPT порта мы рассмотрим в следующей статье. Пока что можете оставить все как есть, позже вы всегда сможете изменить настройки команд под любой тип программатора и микроконтроллера.

При компиляции для команды avra мы указывали путь к INC-файлам, что же это такое? - это файлы (расширение ".inc") с набором макросов и предопределений для конкретных моделей микроконтроллеров что нам будут необходимы в процессе написания наших программ на Ассемблере. Посмотреть список доступных файлов под разные модели чипов можно командой в консоли:

ls /usr/share/avra/

Для того чтобы результат прошивки микроконтроллера через avrdude при помощи кнопки Flash отображался во встроенном терминале нужно в настройках терминала Geany (Edit - Preferences - Terminal) установить галочку напротив пункта "Execute programs in the VTE".

Настройка Geany для AVR Си

С настройками для AVR-ассемблера мы разобрались, теперь сделаем настройки кнопок для компиляции, сборки и прошивки программы написанной на языке Си.

Откроем в Geany какой-либо файл с расширением ".c" для редактирования. Снова идем в настройки команд для сборки: меню Build - Set Build Commands.

Делаем настройки как показано на рисунке ниже:

Geany AVR GCC настройки

Рис. 2. Настройка Geany для компиляции и прошивки AVR GCC.

Рассмотрим каждую из команд:

  • avr-gcc -mmcu=atmega8 -Os %f -o %e.o   - компилируем ".c" файл и получаем на выходе объектный файл с расширением".o";
  • avr-objcopy -j .text -j .data -O ihex  %e.o  %e.hex   - создаем на основе файла ".o" файл формата Intel HEX ".hex";
  • avr-size %e.hex   - смотрим статистику по размеру получившегося HEX-файла;
  • avrdude -c usbasp -p m8 -P usb -U flash:w:%e.hex   - прошиваем микроконтроллер ATmega8 (ключ -p m8) при помощи avrdude.

Здесь, как и в настройках для Ассемблера, не забываем что для avrdude нужно указать соответствующий ключ "-p" с типом используемого микроконтроллера, а также ключ "-c" с указанным после него типом используемого программатора. Где узнать имя МК и название программатора для использования в этих опциях avrdude было рассмотрено выше.

Кроме того, для компилятора avr-gcc нужно указать свой тип микроконтроллера, это делается при помощи ключа "-mmcu=atmega8". Список микроконтроллеров и их названия для использования в данной опции представлены на страничке документации по GCC: https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html

Заключение

В настройках Geany для кнопок Компиляция-Сборка-Запуск можно указывать не только команды но и скрипты с целыми списками команд на выполнение или же команды для работы с использованием Makefile. Все достаточно просто и удобно!

В следующей статье мы подробно рассмотрим программу avrdude, ее параметры и настройки, приведем примеры запуска программы для чтения и записи разных областей памяти микроконтроллера.

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Комментарии к публикации (3):
михаил #1михаил
02 Январь 2018 13:12

avr-gcc -mmcu=atmega8 -Os %f -o %e.o в папке проекта создается файл main.o
avr-objcopy -j .text -j .data -O ihex %e.o %e.hex а здесь сообщается, что нет файла main.o
И что дальше?

0
ph0en1x #2ph0en1x
02 Январь 2018 15:41

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

Допустим что файл с исходным кодом называется "main.c", а проект с ним размещен в директории "/home/me/avrprojects/main".

Среда Geany перед выполнением следующей команды "avr-gcc -mmcu=atmega8 -Os %f -o %e.o" выполняет подстановку значений:

  1. %f - имя текущего файла с исходным кодом (путь отсутствует, расширение присутствует) "main.c";
  2. %e - имя текущего файла с исходным кодом (путь и расширение отсутствуют) "main".

Делаем подстановки и получаем следующую команду:

avr-gcc -mmcu=atmega8 -Os main.c -o main.o

Чтобы при выполнении этой команды программа avr-gcc смогла найти файл "main.c" (полный путь к нему не указан), нужно из консоли перейти в директорию где этот файл размещен (сделать директорию текущей, там же потом будет создан файл "main.o"):

cd /home/me/avrprojects/main

Теперь в том же окне консоли можно выполнить приведенную выше команду для компиляции кода - в папке должен появиться объектный файл "main.o".

Переходим к следующей команде: "avr-objcopy -j .text -j .data -O ihex %e.o %e.hex". Выполнив подстановки имен, среда Geany запустит ее в следующем виде:

avr-objcopy -j .text -j .data -O ihex main.o main.hex

Выполняем эту команду в том же окне терминала, в результате в директории проекта (где размещены "main.c" и "main.o") должен появиться файл "main.hex".

И в заключение, команда для прошивки через AVRDude: "avrdude -c usbasp -p m8 -P usb -U flash:w:%e.hex". Для данного проекта среда Geany запустит ее из текущей директории проекта в следующем виде:

avrdude -c usbasp -p m8 -P usb -U flash:w:main.hex

Теперь вам должно быть понятно как среда Geany запускает команды прописанные в меню "Build", как выполняет подстановки имен файлов для построения команд.

Важно заметить что для подстановки вместо "%f" и "%e" программа Geany берет имя текущего файла, который открыт в редакторе исходного кода на момент запуска команды сборки. Поэтому все нажатия кнопок для сборки проекта в Geany нужно выполнять не меняя текущий открытый в редакторе файл исходного кода (не меняя текущую открытую вкладку редактора).

Для работы с одним проектом вместо подстановок "%f" и "%e" можно прописать полные пути ко всем файлам. В таком случае, вместо использования имени файла с текущей открытой вкладки редактора, Geany будет использовать имена файлов с путями которые были указаны прямо в команде.

Для рассмотренного выше примера команды можно переписать вот так:

avr-gcc -mmcu=atmega8 -Os /home/me/avrprojects/main/main.c -o /home/me/avrprojects/main/main.o
avr-objcopy -j .text -j .data -O ihex /home/me/avrprojects/main/main.o /home/me/avrprojects/main/main.hex
avrdude -c usbasp -p m8 -P usb -U flash:w:/home/me/avrprojects/main/main.hex

Эти команды уже можно запускать из любого окна терминала, поскольку к файлам прописаны абсолютные пути, а расположение программ "avr-gcc", "avr-objcopy", "avrdude" операционная система знает уже изначально.

Если эти команды прописать в настройках меню "Build", то текущая открытая вкладка в редакторе уже не будет иметь никакого влияния на выполнение этих команд и подстановку значений имен (в этих командах уже нет подстановок).

Вооружившись пониманием того как это все работает, можно конструировать свои более сложные команды для сборки самых разных проектов, которые написаны на C, ASM, Python и других языках программирования. Можно заполнить пустые поля в настройках меню "Build" своими полезными командами (утилитами) для быстрого их вызова в процессе сборки и разработки проектов.

Geany поставляется с хорошим комплектом документации, для ее вызова достаточно нажать F1 или же выбрать в основном меню "Help" пункт "Help". Там можно найти описание подстановок "%d", "%e", "%f ", "%p", "%l" для настройки меню "Build", а также множество другой полезной информации.

0
михаил #3михаил
02 Январь 2018 17:14

У меня немного другое окошко "Сборка" - Compile и Build присутствуют, затем Lint(не знаю, первый раз вижу такую команду) затем "Собрать", "Собрать заданную цель...", "Собрать объектный файл", прописаны кирилицей.
Может avr-objcopy -j .text -j .data -O ihex %e.o %e.hex нужно прописАть в "Собрать объектный файл"? Сейчас попробую, если не получится, буду штудировать help.
Спасибо за советы.

0