1 z 7
Artykuł pochodzi ze strony XYZ HOBBY ROBOT (xyz.isgreat.org)
AVR-GCC w Linuksie - przykład instalacji ze zródeł
28.04.10 ABXYZ
Ostatnio aktualizowałem na swoim
PC system Linux Slackware i całe
oprogramowanie. I z tej okazji
opiszę tutaj szczegółowo, krok po
kroku, jak zainstalować kompilator
AVR-GCC z plików zródłowych.
Opiszę równie\ jak zacząć u\ywać AVR-GCC: jak skompilować
przykładowy program w języku C i jak zaprogramować pamięć
AVRa. Na pewno przykład ten komuś się przyda.
Aby zbudować środowisko programistyczne AVR-GCC (kompilator
języka C i zestaw programów narzędziowych), potrzeba
zainstalować pakiety: binutils, gcc, avr-libc. Przyda się tak\e
program do obsługi programatora ISP, najlepszy jest avrdude. To
jest zestaw minimum pozwalający kompilować programy
i programować AVRy. W drugiej części tego artykułu napiszę na
temat debugowania i symulacji, opiszÄ™ instalacjÄ™: avr-gdb,
avr-insight, avarice, simulavr.
KROK 1
ZaczÄ…Å‚em od utworzenia na dysku tymczasowego katalogu o nazwie
avrsrc, do którego pobrałem z internetu paczki zawierające pliki
zródłowe instalowanego oprogramowania.
$ mkdir avrsrc
$ cd avrsrc
$ wget ftp.gnu.org/gnu/binutils/binutils-2.20.tar.bz2
$ wget ftp.gnu.org/gnu/gcc/gcc-4.3.3/gcc-core-4.3.3.tar.bz2
$ wget http://mirror.lihnidos.org/GNU/savannah/avr-libc/avr-libc-
1.6.7.tar.bz2
$ wget http://mirror.lihnidos.org/GNU/savannah/avrdude/avrdude-
5.9.tar.gz
Wiem z doświadczenia, \e kompilacja najnowszych wersji gcc dla
AVRów, z jakiś nieznanych powodów, mo\e zakończyć się
niepowodzeniem. Aby uniknąć ewentualnych problemów, pobrałem
z Internetu gcc w tej wersji, jaka jest w aktualnym pakiecie
WinAVR. Zamierzamy programować AVRy tylko w język C (bez
C++), dlatego pobrałem mniejszą paczkę gcc-core.
Następnie zało\yłem nowy katalog dla środowiska AVR-GCC,
wszystkie pliki instalowane będą w osobnym katalogu /usr/local/avr
. Przy kolejnej aktualizacji, nie będzie kłopotu z odinstalowaniem
starszej wersji AVR-GCC, po prostu usunÄ™ stary katalog albo
zmienię jego nazwę na inną. Właścicielem katalogu /usr/local jest
root, więc aby zało\yć w tam nowym podkatalog, zmieniłem
u\ytkownika systemu na root.
$ su -l
# mkdir /usr/local/avr
# exit
$
2 z 7
Dodałem do ście\ki przeszukiwania podkatalog /usr/local/avr/bin,
tam trafiÄ… wszytki plik wykonywalne.
$ export PATH=$PATH:/usr/local/avr/bin
Aby na stałe dodać katalog /usr/local/avr/bin do ście\ki
przeszukiwania, otworzyłem do edycji plik /etc/profile. U\ywam
edytora tekstu gvim.
$ su -l
# gvim /etc/profile
# exit
I na końcu pliku /etc/profile dopisałem polecenie
export PATH=$PATH:/usr/local/avr/bin
KROK 2 - instalacja binutils
Rozpakowałem archiwum binutils-2.20.tar.bz2 i przeszedłem do
katalogu ze zródłami binutils
$ tar -xjvf binutils-2.20.tar.bz2
$ cd binutils-2.20
Kompilację binutils nale\y przeprowadzić z podkatalogu, więc
w katalogu ze zródłami binutils zało\yłem podkatalog obj-avr.
$ mkdir obj-avr
$ cd obj-avr
Będąc w katalogu binutils-2.20/obj-avr uruchomiłem skrypt
configure z odpowiednio dobranymi opcjami.
$ ../configure --prefix=/usr/local/avr --target=avr --disable-nls
Skrypt configure zakończył działanie bez błędu, uruchomiłem
kompilacjÄ™
$ make
Aby skrypt instalacyjny miał dostęp do katalogu /usr/local/avr,
trzeba instalację plików przeprowadzić z konta u\ytkownika root
Zmieniłem u\ytkownika na root i uruchomiłem instalację plików.
$ su -l
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
$ cd ../..
KROK 3 - Instalacja gcc
Rozpakowałem archiwum gcc-core-4.3.3.tar.bz2 i przeszedłem do
katalogu z plikami zródłowymi gcc
$ tar -xjvf gcc-core-4.3.3.tar.bz2
$ cd gcc-4.3.3
Podobnie jak w przypadku binutils, kompilacjÄ™ gcc nale\y
przeprowadzić z podkatalogu. W katalogu ze zródłami gcc
zało\yłem podkatalog obj-avr.
3 z 7
$ mkdir obj-avr
$ cd obj-avr
Będąc w katalogu gcc-4.3.3/obj-avr uruchomiłem skrypt configure
z odpowiednimi opcjami.
$ ../configure --prefix=/usr/local/avr --target=avr --enable-
languages=c --disable-nls --disable-libssp --with-dwarf2
Uruchomiłem kompilację
$ make
Zmieniłem u\ytkownika na root i uruchomiłem instalację plików
$ su -l
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
# cd ../..
KROK 4 - insatalacja avr-libc
Rozpakowałem archiwum avr-libc-1.6.7.tar.bz2 i przeszedłem do
katalogu ze zródłami avr-libc.
$ tar -xjvf avr-libc-1.6.7.tar.bz2
$ cd avr-libc-1.6.7
Będąc w katalogu avr-libc-1.6.7 uruchomiłem skrypt configure
z odpowiednimi opcjami.
$ ./configure --prefix=/usr/local/avr --build=`./config.guess`
--host=avr
Skompilowałem
$ make
Następnie zmieniłem u\ytkownika na root
$ su -l
W trakcie instalacji plików avr-libc powinien być ju\ dostępny
działający kompilator avr-gcc. Dlatego równie\ dla u\ytkownika
root dodałem do ście\ki przeszukiwania katalog /usr/local/avr/bin
# export PATH=$PATH:/usr/local/avr/bin
Uruchomiłem instalacje plików avr-libc
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
# cd ../..
KROK 5 - instalacja avrdude
Rozpakowałem archiwum avrdude-5.9.tar.gz i przeszedłem do
katalogu ze zródłami avrdude.
$ tar -xzvf avrdude-5.9.tar.gz
$ cd avrdude-5.9
Będąc w katalogu avrdude-5.9 uruchomiłem skrypt configure .
$ ./configure --prefix=/usr/local/avr
4 z 7
Skompilowałem
$ make
Przeszedłem na konto root i uruchomiłem instalację plików
$ su -l
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
$ cd ..
Programator USBasp
Ja u\ywam programatora USBasp. W Linuksie nie trzeba instalować
\adnych dodatkowych sterowników, aby korzystać z programatora
USBasp. Jednak programator jest dostępny jedynie dla u\ytkownika
root. śeby dać mo\liwość korzystania z programatora USBasp tak\e
innym u\ytkownikom systemu, zrobiłem następującą rzecz:
zmieniłem u\ytkownika na root, i z pomocą edytora tekstu,
w katalogu /etc/udev/rules.d/, utworzyłem nowy plik o nazwie
60-objdev.rules
# su -l
# gvim /etc/udev/rules.d/60-objdev.rules
I wkleiłem do tego pliku poni\szą regułkę.
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="objdev_rules_end"
# USBasp
SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="users", MODE="666"
LABEL="objdev_rules_end"
Zapisałem plik i zrestartowałem udev. W Slackware mo\na
zrestartować udev wpisując polecenie
# /etc/rc.d/rc.udev restart
# exit
A na przykład w Ubuntu
$ sudo /etc/init.d/udev restart
Aby to zadziałało trzeba odłączyć na chwilę programator USBasp
z portu USB komputera i podłączyć ponownie.
Test AVR-GCC - kompilacja przykładowego programiku
Utworzyłem katalog projektu, aby w nim przeprowadzić kompilację
przykładowego programiku, celem sprawdzenia czy kompilator
właściwie działa.
$ mkdir avrgcc_test
$ cd avrgcc_test
W katalogu projektu avrgcc_test, z pomocÄ… edytora tekstu,
utworzyłem nowy plik o nazwie led.c
$ gvim led.c
I wkleiłem do niego poni\szy kod przykładowego programiku, i
zapisałem.
/* "led.c" - programik do testowania środowiska WinAVR */
5 z 7
/* układ ATmega 1MHz */
/* PB0,PB1 - diody LED; PD0 - przycisk */
#define F_CPU 1000000L
#include
#include
int main( )
(void)
( )
( )
{
{
{
{
DDRB |= _BV( )|_BV( );
|= ( )| ( );
|= (0)| (1);
|= ( )| ( );
PORTB |= _BV( );
|= ( );
|= (0);
|= ( );
PORTB &= ~_BV( );
&= ~ ( );
&= ~ (1);
&= ~ ( );
DDRD &= ~_BV( );
&= ~ ( );
&= ~ (0);
&= ~ ( );
PORTD |= _BV( );
|= ( );
|= (0);
|= ( );
while (1)
( )
( )
( )
{
{
{
{
PORTB ^=_BV( );
^= ( );
^= (0);
^= ( );
PORTB ^=_BV( );
^= ( );
^= (1);
^= ( );
_delay_ms((PIND & _BV( ))? 1000: 200);
(( & (0))? : );
(( & ( ))? : );
(( & ( ))? : );
}
}
}
}
}
}
}
}
Listing przykładowego programu
Animacja poni\ej demonstruje jak powinien działać nasz
przykładowy program.
Efekt działania przykładowego programu. Do portów PB0..PB1 przyłączone są diody LED, do
PD0 przycisk.
Następnie skompilowałem programik z pliku led.c poleceniem:
$ avr-gcc -mmcu=atmega16 -Os -Wall led.c -o led.out -lm
Z wynikowego pliku led.out utworzyłem plik dla programatora
led.hex
$ avr-objcopy -O ihex -R .eeprom led.out led.hex
Sprawdziłem wielkość kodu wynikowego
$ avr-size led.out
Z pomocą programu avrdude zapisałem kod zawarty w pliku led.hex
do pamięci flash AVRa atmega16
$ avrdude -c usbasp -p m16 -U flash:w:led.hex
Kompilacja przykładowego programu i programowanie pamięci flash
AVRa przebiegło bez problemów, zatem AVR-GCC zainstalowany
i programator ISP działa.
Plik Makefile
6 z 7
Przydałby się jeszcze plik makefile, aby zautomatyzować kompilację
projektów składających się z wielu plików zródłowych. Ja do
katalogu projektu kopiuje zwykle taki plik
# avr-gcc makefile
# Typ AVRa
MMCU = atmega16
# Częstotliwość zegara
F_CPU = 1000000
# Typ programatora
PROGRAMMER = usbasp
PROGRAMMER_PORT = usb
# Nazwa wynikowego pliku hex
PROJECT = led
# Pliki zródłowe
SOURCES = led.c
CC = avr-gcc
OBJCOPY = avr-objcopy
CDEFS = -DF_CPU=$(F_CPU)UL
CFLAGS = $(CDEFS)
CFLAGS += -mmcu=$(MMCU) -g -Os -Wall
OBJECTS = $(SOURCES:.c=.o)
$(PROJECT).hex: $(PROJECT).out
$(OBJCOPY) -O ihex -R .eeprom $(PROJECT).out $(PROJECT).hex
$(PROJECT).out: $(OBJECTS)
$(CC) $(CFLAGS) $^ -o $@ -lm
$.o:%.c
$(CC) $(CFLAGS) $< -o $@
program_flash: $(PROJECT).hex
avrdude -c $(PROGRAMMER) -P $(PROGRAMMER_PORT) -p $(MMCU) -U flash:w:$(PROJECT).hex
clean:
rm -f $(OBJECTS)
rm -f $(PROJECT).out
rm -f $(PROJECT).hex
.PHONY: clean program_flash
Plik Makefile
Wa\ne! Plik makefile składa się z reguł zbudowanych według
wzoru:
CEL:ZALEśNOŚCI
[Tab]KOMENDA
Znak tabulacji przed komendÄ… jest konieczny, trzeba o tym
pamiętać edytując plik makefile.
Jest ju\ w katalogu odpowiedni pliki Makefile, zatem, aby
skompilować przykładowy programik wydaję polecenie:
$ make
śeby zaprogramować AVRa, piszę:
$ make program_flash
śeby posprzątać w katalogu projektu
$ make clean
7 z 7
CiÄ…g dalszy nastÄ…pi :)
Copyright © 2009-2011 ABXYZ - Wszelkie prawa zastrze\one
Wyszukiwarka
Podobne podstrony:
Using the EEPROM memory in AVR GCC
Kurs AVR GCC cz 5
przyklady instalacji kilku systemow linux 5
Kurs AVR GCC, cz 3
Kurs AVR GCC Wyświetlacz LCD od Nokii310
AVR GCC kompilator C dla mikrokontrolerów AVR, część 12
AVR GCC kompilator C dla mikrokontrolerów AVR, część 11
Kurs AVR GCC cz 2
przyklady instalacji kilku systemow linux 2
przykladowa notatka ze spotkania
AVR GCC cz7
miejsce biomasy drzewnei w procesach pozyskiwania energii ze zrodel odnawialnych
więcej podobnych podstron