28 января 2014 г.

Среда Разработки Geany

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


Среда Разработки Geany

1) установка пакета Geany

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

Первый шаг  - установка пакета Geany. Открываем терминал и вводим:
    sudo apt-get install geany


2) настройка стиля подсветки синтаксиса

Сделаем хороший стиль подсветки синтаксиса ассемблера. Для этого выполняем: 
gedit ~/.config/geany/filedefs/filetypes.asm
и вставляем в редакторе текст вот с этой страницы: http://wiki.geany.org/config/avr_asm
или непосредственно из этого файла
wget http://wiki.geany.org/_export/code/config/avr_asm
Сохраняем filetypes.asm



3) Настройка горячих клавиш

Теперь запускаем Geany, создаем новый файл или открываем любой исходник .asm, открываем вкладку "Сборка", выбираем пункт "Установить команды сборки".
Видим вот такое окно:


В поля "Скомпилировать" и "Выполнить" (на скрине выделено оранжевым) вводим соответственно команды для компиляции и прошивки в микроконтроллер программы. Впрочем не спешите вводить именно их, далее поймете почему.

Команда для компиляции будет выглядеть так:
    avra --includepath ~/Projects/APPNOTES %f

Команда "Выполнить" задействуем для прошивки контроллера Tiny2313:
    avrdude -p t2313 -c usbasp -U flash:w:%e.hex

Пояснения для любознательных.
Geany распознает 4 встроенных шаблона:
 %f - имя текущего файла (в нашем случае это Example.asm) 
 %e - имя текущего файла без расширения (Example)
 %d - путь к папке, в которой лежит текущий файл (~/Projects/AVR/Example/)
 %p - путь к текущему проекту (я не разобрался что это значит, но не важно :))

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



4) Учим распознавать тип микроконтроллера

Все хорошо, но нужно научить Geany самому распознавать тип микроконтроллера и менять опцию -p в команде заливки через avrdude. Это можно сделать заставить Geany находить и анализировать строки вида .include "m8def.inc" (если используется atmega 8) в исходном кода программы, которые указываю тип используемого микроконтроллера и должны быть в каждом asm файле.

Будем использовать такой скрипт:
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

Эту строку нужно вбить в поле "Выполнить"

Пояснения для любознательных:
  PART - строковая переменная PART, в которую заносится результат выполнения скрипта, определяющего тип контроллера
  echo "target device: $PART" - выводим в консоль название распознанного контроллера (просто так, для справки)
  avrdude -p $PART -c usbasp -U flash:w:"%e.hex" - запускаем avrdude, подставляя в него нужную опцию
  grep -m 1 ".include ".*def.inc"" %f -  находит строчку вида .include "[тут что угодно]def.inc", опция -m 1 указывает что не стоит продолжать поиск, если хотя бы 1 строка уже найдена.
  grep -o "(tn|m)[0-9]+" - из найденной строки с помощью шаблона вычленяет название контроллера. Я использую только "меги" и "тиньки", поэтому у меня указаны только tn и m. Вы можете адаптировать скрипт, например для xmega будет (tn|m|x) , для AT90S (tn|m|x|[0-9])  и так далее.
  sed "s/tn/t/g" - заменяет tn на t. так как в аппноутах Tiny2313 например зовется tn2313, а avrdude ее понимает как t2313. 

Есть одна полезная и приятная особенность данного скрипта:  так как для связки команд используется &&, то следующая команда выполняется только в случае успешного завершения предыдущей. Таким образом, если строка .include не была найдена в файле, или при прошивке что-то пошло не так - терминал останется открытым и мы сможем прочитать сообщения о случившихся ошибках.

В конечном виде команда для компиляции будет выглядеть так:
    avra --includepath ~/Projects/APPNOTES %f

А команда для прошивки так:
    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 -p $PART -c usbasp -U hfuse:w:0xХХ:m  -U lfuse:w:0xYY:m
где XX и YY заранее вычисленные hfuse и lfuse.


Учитывая высокую вероятность ошибки и крайнюю трагичность последствий этой ошибки, такой вариант прошивки фьюзов применять не станем. Вместо этого будем использовать графическую оболочку к avrdude - AVR8_Burn-O-Mat

Вот сайт этой программы: http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_en.html

Качаем deb-пакет с сайта, устанавливаем...
У меня пакет уставлиться не захотел, выдавая ошибку
  dpkg: ошибка при обработке параметра avr8-burn-o-mat-2.1.2-all.deb (--install):
 анализ файла «/var/lib/dpkg/tmp.ci/control» около строки 2 пакета «avr8-burn-o-mat»:
 ошибка в строке Version «REPLACE_PROG_VERSION»: номер версии не начинается с цифры

Желающие могут скачать Sourcecode AVR8_Burn-O-Mat, и откомпилировать :), остальным  же предлагаю воспользоваться "починенным" пакетом, действуем так:
wget ...
dpkg -i ...

При первом запуске AVR8_Burn-O-Mat потребуется его настроить. Переходим во вкладку Settings - AVRDUDE
Видим вот такое окно:

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

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

Можно запуск avr8-burn-o-mat повесить на оставшееся свободным действие "Сборка". 




ИТОГ
Работать в Geany стало достаточно удобно: 
Скомпилировать - F8, или иконка с пирамидой и шаром.
Прошить - F5, или иконка с шестеренками.
Править фьюзы - F9, или иконка с кирпичем.






___
http://radiokot.ru/articles/52/ - сама статья

http://greenoakst.blogspot.ru/2012/07/usbasp-ubuntu.html - Решаем проблему с правами для USBasp в Ubuntu

Комментариев нет:

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