RoboterNetz.de Foren-▄bersicht               
 RN-Wissen Home  -  Community Home  -  Alle Artikel -  Mitglieder -  Moderatoren  -  Bilderliste  -  Letzte ├änderungen
 Kategorien  -  Beliebte Seiten  -  Sackgassenartikel  -  Artikel ohne Kategorie  -  Neue Artikel  -  Anmelden

Avr-gcc und avrdude installieren

aus RN-Wissen, der freien Wissensdatenbank

Es gibt bereits eine sehr gute Anleitung f├╝r das Installieren vom avr-gcc, aber sie ist etwas veraltet. F├╝r den original Text siehe [1]. Ich werde im folgenden nur das n├Âtigste von diesem Artikel kopieren.

Es gibt drei Teile. Im ersten Teil wird die Installation erkl├Ąrt, im zweiten wird gezeigt, wie man damit denn nun seine Programme f├╝r den MCU erstellt. Im dritten Teil stehen noch ein paar typische Fehlermeldungen und die L├Âsungen.

Inhaltsverzeichnis

Installation

Also los. Wir brauchen folgende Software:

binutils

Mit den binutils bekommt ihr Programme wie z.b. avr-as (Assembler), avr-ld (Linker), avr-objcopy (Um die Intel-Hex-Files zu erstellen).

Und so wird's gemacht (Das entpacken kann eine Weile dauern):

tar jxf binutils-2.17.tar.bz2
cd binutils-2.17/
mkdir obj-avr
cd obj-avr
../configure --target=avr --disable-nls
make
  • Als root:
make install

avr-gcc

avr-gcc ist unser eigentlicher Compiler. Er installiert sich wie folgt:

tar jxf gcc-core-4.1.2.tar.bz2
cd gcc-4.1.2

mkdir obj-avr
cd obj-avr
../configure --target=avr --disable-nls --enable-languages=c --disable-libssp

make
  • Als root:
make install

avr C-library (avr-libc)

tar jxf avr-libc-1.4.5.tar.bz2
cd avr-libc-1.4.5

./configure --build=`./config.guess` --host=avr

make 
  • Als root:
make install


avrdude

tar xzf avrdude-5.3.1.tar.gz
cd avrdude-5.3.1
./configure
make
  • Als root:
make install

Wer den avr910 Programmer benutzt, muss avrdude erst fit f├╝r einige neuere Controller machen. (ATtiny2313, ATmega162, ...). Dazu m├╝sst ihr die Configdatei von avrdude anpassen. Ihr findet sie unter /usr/local/avr/etc/avrdude.conf

Folgende Zeilen m├╝ssen erg├Ąnzt werden:

#------------------------------------------------------------
# ATtiny2313
#------------------------------------------------------------

part
     id            = "t2313";
     desc          = "ATtiny2313";
     stk500_devcode   = 0x23;
##  Try the STK500 devcode:
   [b]avr910_devcode   = 0x23;[/b]
.....

#------------------------------------------------------------
# ATmega8535
#------------------------------------------------------------

part
    id               = "m8535";
    desc             = "ATMEGA8535";
    stk500_devcode   = 0x64;
   [b] avr910_devcode   = 0x69;[/b]

Analog verfahren f├╝r ATmega64, ATmega162 und ATmega169. Die devicecodes hief├╝r sind:

m64:     avr910_devcode   = 0x45;
m162:    avr910_devcode   = 0x62;
m169:    avr910_devcode   = 0x78;

Wer sich einen eigenen avr910 Programmer bauen will, dem sei diese Seite ans Herz gelegt: [2]. Ich habe die Version genommen und um ein Buffer erweitert. Die Bauanleitung daf├╝r gibt es bald auf unserer Roboterseite.

Somit h├Ątten wir nun alles was wir brauchen installiert.

Beispiel-Projekt

Hier erstmal ein winziges Beispielprogramm f├╝r den ATtiny2313.

/*
 *  blink.c
 *  ATtiny2313 mit 1 MHz
 *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht 3.81Hz
 */

#include <avr/io.h>
#include <avr/interrupt.h>

ISR (SIG_TIMER0_OVF)
{
  PORTB =~ PORTB; // PORTB inventieren
}

int main()
{
  DDRB  = 0xFF; // PORTB als Ausgang schalten
  PORTB = 0x00; // Alle Ausgaenge auf 0 schalten

  TCCR0B |= (1 << CS02) | (1 << CS00); //Prescaler auf 1024 stellen
  TIMSK  |= (1 << TOIE0);              // Timer 0 Overflow Interrupt enable

  sei(); // Interrupts einschalten

  for(;;); //ever
}

Den Quelltext nehmt ihr und speichert ihn in die Datei blink.c.

Jetzt kommt das Makefile. Ich habe schonmal ein einfaches vorbereitet:

TARGET = blink
MCU    = attiny2313
CC     = avr-gcc
 
CFLAGS  =-mmcu=$(MCU) -Wall 
LDFLAGS =-mmcu=$(MCU)

$(TARGET): $(TARGET).o

$(TARGET).hex : $(TARGET)
	 avr-objcopy -j .data -j .text -O ihex $< $@

load: $(TARGET).hex
	avrdude -p t2313 -c avr910 -U flash:w:$(TARGET).hex -v

clean:
	rm -f *.o  *.hex $(TARGET)

Das speichert ihr in der Datei Makefile im selben Ordner, in der auch die Datei blink.c liegt. Unbedingt darauf achten, da├č die Einr├╝ckungen durch TABs erfolgen und nicht durch Leerzeichen!

Als ersten Test kann man ohne Gefahr make -n benutzen. Hier wird nur gezeigt was passieren w├╝rde.

Dann in der Konsole "make" tippen und es sollte compiliert werden. Mit "make load" wird das Hexfile dann in den MCU ├╝bertragen.

Erkl├Ąrung

MCU=attiny2313
MCU ist eine Variable mit dem Inhalt attiny2313. ├ťberall, wo jetzte $(MCU) steht, wird der Variabelninhalt benutzt. Genauso funktioniert das auch mit TARGET, CC, LDFLAGS und CFLAGS.

Mit den letzten drei Variablen wird das Verhalten von make ver├Ąndert. CC bestimmt welcher Compiler verwendet wird (Default:cc). CFLAGS beinflussen das Compilieren, mit -mmcu= wird hier der Prozessortyp gesetzt, -Wall schaltet Warnungen f├╝r den avr-gcc ein. LDFLAGS werden dem Linker ├╝bergeben und sollten mindestens den Prozessortyp beinnhalten.

F├╝hrt man nun make aus, passiert folgendes: Nach dem die Variablen gesetzt sind, wird ├╝berpr├╝ft ob $(TARGET) — das ist hier blink — existiert. Wenn nicht will make es aus $(TARGET).o (blink.o) erzeugen. Nun gibt es aber auch $(TARGET).o nicht, aber dank der eingebauten Regeln wei├č make das er das .o aus den zugeh├Ârigen .c erzeugen muss, und schon ist der erste Schritt getan.

Nachdem ihr make erfolgreich ausgef├╝hrt habt, liegt im Ordner eine Datei mit dem Name blink. Nun kommt Schritt 2. mit make load wird die Datei in den Controler gebrannt. Dazu sind 2 Dinge notwendig:

avr-objcopy -j .text -j .data -O ihex blink blink.hex
Hier wird mit Hilfe des Programms avr-objcopy alles ├╝berfl├╝ssige entfernt und ein Hexfile erzeugt.
avrdude -p t2313 -c avr910 -U flash:w:blink.hex -v
Hier wird durch avrdude das Programm wirklich gebrannt.
-p
gibt an, um welchen MCU es sich handelt
-c
gibt an, um welchen Programmer es sich handelt. Hier k├Ânnte z.B stk500 stehen.
-U flash:w:$(TARGET).hex
bedeutet einfach, dass das Programm in den Flash geschrieben werden soll. w steht f├╝r Schreiben, r f├╝r Lesen und v f├╝r verify. Dann kommt die Variable $(TARGET), die besagt, welche Datei genau ├╝bertragen werden soll.
-v
bedeutet "Verbose Output" und gibt euch mehr Informationen auf der Konsole aus.

Mit make clean werden alle ├╝berfl├╝ssigen Dateien gel├Âscht.

Fehlermeldungen

sollten eigentlich keine vorkommen. Wenn doch, vergewissert euch, dass ihr euch genau an die Anleitung gehalten und nichts falsch abgeschrieben habt!

Hier ein paar typische Fehlermeldungen und ihr L├Âsungen:

Permission denied
Ihr habt nicht die Rechte, um diesen Befehl auszuf├╝hren. H├Âchswahrscheinlich m├╝sst ihr den Befehl als root ausf├╝hren.
programmer is not responding
Es kann keine Verbindung zum Programmer aufgenommen werden: Defektes Kabel, Programmer an der falschen Schnittstelle angeschlossen (default: /dev/ttyS0), kein Strom am Programmer etc.
can't open device "/dev/ttyS0": Permission denied
Als normaler User darf man auf die serielle Schnittstelle nicht lesen oder schreiben. Folgenden Befehl als root ausf├╝hren:
chmod 666 /dev/ttyS0
Zweite und bessere M├Âglichkeit, die Rechte zu ├Ąndern ist es, den Benutzer in die tty-Gruppe auzunehmen. Hier ein Beispiel f├╝r Gentoo. Die Gruppe kann bei anderen Distributionen auch anders hei├čen! Als root in die Konsole schreiben:
> ls -all /dev/ttyS0
crw-rw---- 1 root tty 4, 64 25. Jun 02:12 /dev/ttyS0
>

Hier kann man sch├Ân erkennen, da├č die serielle Schnittstelle dem Benutzer root geh├Ârt und die Gruppe tty darauf zugreifen darf. Mit einem einfachen

> usermod -a -G tty sebastian

wird der User sebastian in die tty-Gruppe aufgenommen.

Noch ein Test, ob alles geklappt hat:

> groups sebastian
tty wheel audio cdrom dialout video games usb users portage scanner

Danach muss sich Benutzer sebastian neu einlogen und wir sind fertig.

Der Vorteil hierbei ist, da├č man Rechte f├╝r alle Ger├Ąte der Gruppe tty erlangt, also alle seriellen Schnittstellen sowie USB ↔ RS232-Adapter, und man braucht an den eigentlichen Rechten nichts zu ver├Ąndern.

Weblinks

Pakete

Slackware

Ein Paket f├╝r Slackware ist f├╝r Zenwalk erh├Ąltlich. Mehr dazu siehe hier: http://support.zenwalk.org/index.php?topic=14131.

Debian Pakete

Die lange Installation kann man sich unter Debian auch leichter machen. Folgende Pakete werden ben├Âtigt:

  1. gcc-avr
  2. avrdude
  3. avr-libc

Einfach per APT installieren: "apt-get install gcc-avr", "apt-get install avrdude" und "apt-get install avr-libc". Das funktioniert nat├╝rlich auch bei den ganzen Debian Abk├Âmmlingen(Knoppix, Ubuntu, etc.).

Siehe auch

Quelle

Autoren

'Pers├Ânliche Werkzeuge

Motortreiber
bis 24V/23A Dauer
Schnittstellen USB
Analog und Servo
robotikhardware.de


Lichtprofi.de
LED Shop
www.lichtprofi.de