Итак, мы научились компилировать исходный код на ассемблере и заливать его микроконтроллер используя консольные команды. Настало время освоить какую-либо Среду Программирования, чтобы можно было сосредоточить все свои способности именно на программировании. Начнем с самой простой - Geany
Среда Разработки Geany
1) установка пакета Geany
В отличие от текстовых редакторов Geany является Средой Разработки, поэтому в ней есть нужные нам три абстрактных действия: компиляция, сборка и запуск. Причем можно задать какие именно команды должны выполняться в этих действиях. Таким образом, мы получаем возможность назначить запуск avra (или gcc-avr если вы пишете на С) на действие "компиляция", и вызов avrdude на "запуск". Действие же "сборка" будем использовать для установки фьюзов.
В отличие от текстовых редакторов 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
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) Учим распознавать тип микроконтроллера
___
http://radiokot.ru/articles/52/ - сама статья
http://greenoakst.blogspot.ru/2012/07/usbasp-ubuntu.html - Решаем проблему с правами для USBasp в Ubuntu
Все хорошо, но нужно научить 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 ...
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
Комментариев нет:
Отправить комментарий