WinAVR представляет собой набор инструментальных средств для работы с микроконтроллерами семейства AVR фирмы ATMEL. В него вошли следующие компоненты: компилятор языка C avr-gcc, библиотека компилятора avr-libs, ассемблер avr-as, интерфейс программатора avrdude, интерфейс JTAG ICE avarice, дебуггер avr-gdb, редактор programmers notepad, и еще много полезных вещей. Весь этот набор собран в один инсталляционный пакет и предназначен для установки на платформу Windows.
Текущая версия WinAVR включает в себя компилятор avr-gcc версии 3.3 и обозначается (например) как 20030424 – что представляет собой дату выхода. Весь этот набор распространяется свободно (производители поддерживают GNU General Public License). Всю последнюю информацию по WinAVR, которую лучше почитать до скачивания инсталляционного пакета, можно найти на сайте http://winavr.sourceforge.net. Для скачивания самой WinAVR идти сюда: http://sourceforge.net/projects/winavr. Только вот объем для скачивания довольно большой – от 12 до 18 мегабайт в зависимости от версии.
ИНСТАЛЛЯЦИЯ WINAVR
Инсталляционный пакет WinAVR представляет собой один exe файл, который необходимо запустить, дабы установить WinAVR. Вначале будет предложено ознакомиться с GNU GPL лицензией, потом следует выбрать место установки WinAVR и нажать “install”. После инсталляции будет предложено ознакомиться с файлом README.txt. Советую почитать его, там много полезной информации.
MAKEFILE
Как может показаться, компилятор avr-gcc очень неудобен тем, что запускается из командной строки без графического интерфейса пользователя (GUI). Тем не менее, этот компилятор может работать с разными программами, имеющими GUI, и легко под это дело конфигурироваться.
Этому способствует то, что avr-gcc использует для своей работы makefile. Makefile сообщает компилятору, какие команды запускать, какие файлы компилировать и линковать, какой выходной код генерировать, и т. д. Makefile обрабатывается программой make. Как один из способов запуска компилятора в командной строке набирается следующее:
d:\mydir\myproj1>make
При этом предпологается, что makefile и компилируемый файл (для примера proj1.c) находятся в директории d:\mydir\myproj1.
Следующая важная вещь, которую надо знать, это то, что makefile имеет несколько различных команд, выполнение которых зависит от содержимого makefile. Для использования определенной командыкомандная строка должна выглядеть следующим образом:
d:\mydir\myproj1>make <команда>
После установки WinAVR в директории (WinAVR)\sample можно найти шаблон makefile’a, который можно скопировать в директорию с проектом и уже там редактировать. В этом makefile’е в начале в виде коментария дано описание всех команд. Приведу некоторые: all, clean, coff. Команда all выполняет компиляцию исходника и, в случае отсутствия ошибок, генерирует файл, который можно прошивать в AVR. Эта команда выполняетя и по умолчанию (когда командная строка содержит только make). Команда clean удаляет все файлы, сгенерированные предыдущей командой.
Если проект будет состоять из нескольких файлов, и в одом из них что-то изменили, то при повторной компиляции будет компилироваться только измененный файл. Для полной перекомпиляции (например, если надо изменить уровень оптимизации, а исходники не редактировались) необходимо вначале выполнить команду make clean, затем команду make all.
Команда coff конвертирует proj1.elf (геннерируется при компиляции) в proj1.cof, который можно загрузить в AvrStudio для пошаговой отладки. Вообще-то команда coff считается устаревшей, так как генерирует cof-файл, который воспринимается AvrStudio с версией не выше 3.x. Для версий 4.07 и выше cof-файл генерируется командой extcoff. Но тут дело вкуса.
Теперь о том, что можно и даже нужно редактировать в makefile. Во-первых, обязательно нужно указать, для какого типа контроллера мы хотим получить выходной код. Строки, где это редактируется, выглядят так:
# MCU name
MCU = atmega128
Первая строка – коментарий, а во второй вместо atmege128 пишем тот тип, который нас интересует (например, at90s2313, at90s8535, attiny22).
Имя проекта, а соответственно и имя исходника с функцией main, и выходные файлы с расширениями hex и cof, определяется в следующих строках:
# Target file name (without extension).
TARGET = main
Здесь вместо main пишем нужное имя проекта.
Если в проект входит несколько файлов, то все они должны быть перечислены в makefile. Сделать это можно по-разному, например так:
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c \
foo.c bar.c
Здесь foo.c и bar.c – два дополнительных файла с кодом, а основной файл – main.c.
Если проект содержит файлы, написанные на ассемблере, то их нужно прописать в строчке ‘ASRC = ‘. Расширение ассемблерных файлов должно быть s или S.
ASRC = myasmfile.S
Для компилятора можно выбрать уровень оптимизации. Доступные уровни 0 (нет оптимизации), 1, 2, 3 и s. Все уровни разные и нельзя сказать, что уровень 3 наилучший. Оптимизируется как по размеру выходного кода, так и по скорости выполнения программы. Например, при уровне оптимизации 3 код получится наибыстрый, но размер кода будет несколько больше, чем более медленный код, полученный при уровне 1. Некоторая средняя оптимизация (по скорости и по размеру) получится при уровне S.
OPT = S
В некоторых версиях makefile поддерживает программирование кристалла со своими настройками. Но так как это не во всех версиях WinAVR, это не стоит здесь рассматривать.
Теперь о том, как подключить к проекту дополнительные директории. Это довольно легко сделать, если в makefile уже есть строка, начинающаяся с EXTRAINCDIRS. Если такой строки нет, то вначале нужно найти строки с флагами компилятора:
В общем makefile довольно мощное средство. Для более полного ознакомления с ним я рекомендую почитать справочное руководство, которое можно найти в папке WinAVR\doc\gnu.
НАСТРОЙКА PROGRAMMERS NOTEPAD
Programmers Notepad (PN) представляет собой редактор с подсвечиванием синтаксиса и возможностью конфигурирования под использование компилятора avr-gcc. Запускаем WinAVR\pn\pn.exe (рис. 1).
Сейчас редактор пустой и его надо настроить. Нажимаем Tools->Options и в открывшемся окне слева жмем на слово Tools.
Теперь жмем на кнопку ‘Add’ и в открывшемся окне заполняем поля
Так мы добавили команду ‘Make All’. Здесь “Name” – то имя команды, которое мы хотим видеть в меню PN. “Command” – команда, которая могла бы быть выполнена из командной строки (мы могли написать make.exe) с параметром “Parameters”. Галочка возле “Capture output?” означает, что ход компиляции можно наблюдать тут же в PN под окном с редактируемой программой, если галочки не будет, ход компиляции можно будет наблюдать в DOS окне, которое закроется при окончании компиляции, что не весьма удобно.
Таким образом можно настроить работу компилятора с различными опциями.
Теперь PN готов к работе.
ПЕРВЫЙ ПРОЕКТ В СРЕДЕ WINAVR
Остается показать, как использовать WinAVR для написания программы для AVR на языке C.
Запустим PN и создадим новый C файл (File->New->C/C++). В открывшемся окне напишем следующий код (ошибки введены специально):
#include
#include
void main (void)
{
unsigned char counter;
//set PORTB for output
DRB = 0xFF;
while (1)
{
//set PORTB.2 high
PORTB |= 1<<2;
//wait (10 * 120000) cycles = wait 1200000 cycles
counter = 0;
while (counter != 5)
{
//wait (30000 x 4) cycles = wait 120000 cycles
_delay_loop_2(30000);
counter++
}
//set PORTB.2 low
PORTB &= ~(1<<2);
//wait (10 * 120000) cycles = wait 1200000 cycles
counter = 0;
while (counter != 5)
{
//wait (30000 x 4) cycles = wait 120000 cycles
_delay_loop_2(30000);
counter++
}
}
return 1;
}
Некоторые пояснения для новичков. Все заголовочные файлы находятся в директории c:\WinAVR\avr\include, а заголовочные файлы, спечифичные для контроллеров AVR, находятся в директории c:\WinAVR\avr\include\avr.
Сохраним этот файл в новой папке под названием test1.c. Откроем в PN файл c:\WinAVR\sample\makefile и тут же сохраним его через File->SaveAs под названием makefile без расширения в той же папке, где до этого сохранили test1.c. Теперь надо отредактировать makefile для работы с test1.c. Как это правильно сделать, смотрите выше.
Теперь попытаемся откомпилировать нашу программу (Tools->Make_All). Если вы не исправили ошибки в тексте программы, то компиляция завершится неудачей. Вот ошибки, которые выдал мой компилятор:
test1.c:5: warning: return type of `main' is not `int'
test1.c: In function `main':
test1.c:8: error: `DRB' undeclared (first use in this function)
test1.c:8: error: (Each undeclared identifier is reported only once
test1.c:8: error: for each function it appears in.)
test1.c:20: error: parse error before '}' token
test1.c:30: error: parse error before '}' token
make: *** [test1.o] Error 1
Исправлять ошибки нужно все, даже если они обозначены как warning. Исправим ошибки: тип главной функции изменим на int, DRB изменим на DDRB, а в обеих строчках, где встречается counter++ допишем точку с запятой. Если ошибки исправлены правильно, компиляция выдаст следующее:
Size after:
text data bss dec hex filename
0 140 0 140 8c test1.hex
Errors: none
-------- end --------
Process Exit Code: 0 И в папке с нашим проектом появится файл test1.hex, который содержит код, готовый для прошивки в контроллер. Если выполнить команду Tools->Make Coff, то в той же папке появится файл tes1.cof, который можно загрузить в AVR Studio и пошагово просмотреть работу программы.
Отличная статья !!! makefile - просто супер расписал ! РЕСПЕКТ !
Пожалуйста остав
Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов!
Подробно тут!