<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Izaseba</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Izaseba"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Izaseba"/>
		<updated>2026-04-11T21:16:27Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:FIFO_mit_avr-gcc&amp;diff=11655</id>
		<title>Diskussion:FIFO mit avr-gcc</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:FIFO_mit_avr-gcc&amp;diff=11655"/>
				<updated>2007-04-23T19:34:46Z</updated>
		
		<summary type="html">&lt;p&gt;Izaseba: habe ich hier ein sei(); übersehen ?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; int fifo_get_nowait (fifo_t *b)&lt;br /&gt;
Liefert das nächste Byte aus der FIFO als int bzw. -1, falls die FIFO leer ist. &lt;br /&gt;
&lt;br /&gt;
Was machst du, wenn FF gespeichert ist ?  oder muß das nur für Text gehen ? &lt;br /&gt;
--PicNick 18:16, 4. Mär 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Wenn FF gespeichert ist, wird FF zurück geliefert. Die FIFOs speichern ihre Werte als unsigned. Der return-Wert ist int, mithin ist also &amp;lt;tt&amp;gt;255 != -1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Will man ein &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt; lesen, dann so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char zeichen;&lt;br /&gt;
int value;&lt;br /&gt;
if (value = fifo_get_nowait (&amp;amp;fifo), value &amp;gt;= 0)&lt;br /&gt;
   zeichen = (char) value;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
bzw. man schreibt &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt; direkt nach UDR oder wohin auch immer. --[[Benutzer:SprinterSB|SprinterSB]] 19:04, 4. Mär 2006 (CET)&lt;br /&gt;
----&lt;br /&gt;
d.h. du verwendest die Bits &amp;gt;8 implizit als Schalter ? naja. &lt;br /&gt;
--PicNick 08:59, 5. Mär 2006 (CET)&lt;br /&gt;
----&lt;br /&gt;
In der FIFO stehen ja nur Werte &amp;gt;= 0. Und der Rückgabewert ist auch immer &amp;gt;= 0, wenn was drinne ist, ansonsten eben &amp;lt;0. Ich erweitere also den Wertebereich. Ausserdem kann auf &amp;lt;0 sehr effizient getestet werden. Wie würdest du es machen? --[[Benutzer:SprinterSB|SprinterSB]] 09:59, 5. Mär 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Mach nur, die Geschmäcker sind halt verschieden, absolute Wahrheiten gibt's nicht. Ich trenne immer Frage und Abholen, wobei die Frage immer non-destruktiv nach der verfügbaren Länge ist. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while (fifo_data() &amp;gt;= required_length ) // anzahl im Buffer&lt;br /&gt;
{&lt;br /&gt;
      Uns_16 = fifo_read_short()  // oder ähnlich&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel: Bei IP etc. hab immer 16 Bit als Länge vorn, da lese ich z.B. erst, wenn die auch da sind. Und dann erst weiter, wenn der record komplett ist. Aber für eine Controller-UART etc. ist das vielleicht auch etwas über-drüber. &lt;br /&gt;
--PicNick 12:05, 5. Mär 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
Jo, das geht auch. Auf &amp;lt;tt&amp;gt;fifo.count&amp;lt;/tt&amp;gt; kann man ja frei zugreifen. Beim nachfolgenden Lesen sind aber evtl. mehr Zeichen im Puffer, was bei den meisten Anwendungen nicht stört. Es sollte nur ein einfaches Grundgerüst sein, das man nach eigenem Gusto erweitern kann, etwa&lt;br /&gt;
 static inline int fifo_contains_at_least_n_bytes_p (const fifo_t * f, const unsigned char num) { f-&amp;gt;count &amp;gt;= num; }&lt;br /&gt;
&lt;br /&gt;
Noch praktischer wäre natürlich eine FIFO, in der man ganze Objekte speichern kann, und nicht nur einzelne Bytes... --[[Benutzer:SprinterSB|SprinterSB]] 22:32, 5. Mär 2006 (CET)&lt;br /&gt;
----&lt;br /&gt;
*g* Wenn du Objecte auch als solches reinkriegst, is besser, du legst sie gleich als verkettete Liste an. das ist natürlich mit Heap einiges einfacher. Für Controller wird's da aber eng. geht meist eh' nur ums UART-buffern.&lt;br /&gt;
--PicNick 07:59, 6. Mär 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
== habe ich hier ein sei(); übersehen ? ==&lt;br /&gt;
&lt;br /&gt;
Hallo Sprinter :-)&lt;br /&gt;
&lt;br /&gt;
Ich analysiere gerade deine FIFO Puffer, klasse !&lt;br /&gt;
&lt;br /&gt;
Nur eine Frage stellt sich noch, hier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        uint8_t sreg = SREG;&lt;br /&gt;
	cli();&lt;br /&gt;
	f-&amp;gt;count--;&lt;br /&gt;
	SREG = sreg;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Muß da nicht noch ein sei(); hin&amp;lt;br/&amp;gt;&lt;br /&gt;
Oder hab ich da was übersehen ?&amp;lt;br/&amp;gt;&lt;br /&gt;
Gruß Sebastian&lt;br /&gt;
--[[Benutzer:Izaseba|izaseba]] 21:34, 23. Apr 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Izaseba</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=7975</id>
		<title>Avr-gcc und avrdude installieren</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=7975"/>
				<updated>2006-06-25T13:52:36Z</updated>
		
		<summary type="html">&lt;p&gt;Izaseba: /* Fehlermeldungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 [http://www.tldp.org/linuxfocus/English/November2004/article352.shtml].&lt;br /&gt;
Ich werde im folgenden nur das nötigste von diesem Artikel kopieren.&lt;br /&gt;
&lt;br /&gt;
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 [[Microcontroller|MCU]] erstellt. Im dritten Teil stehen noch ein paar typische Fehlermeldungen und die Lösungen.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Also los. Wir brauchen folgende Software:&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/binutils/ binutils-2.16.1.tar.bz2]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/gcc/gcc-4.0.2/ gcc-core-4.0.2.tar.bz2] &lt;br /&gt;
* [http://savannah.nongnu.org/download/avr-libc/ avr-libc-1.2.5.tar.bz2]    Dort findet ihr auch das Manual der avr-libc&lt;br /&gt;
* [http://savannah.nongnu.org/download/avrdude/ avrdude-5.0.tar.gz]       &lt;br /&gt;
&lt;br /&gt;
Als erstes erstellen wir das Verzeichnis, in das der avr-gcc installiert wird:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr&lt;br /&gt;
&lt;br /&gt;
Und das Verzeichnis in dem die Programme liegen werden:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Dieses Verzeichnis wird auch gleich in die &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;-Variable geschrieben:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Achtung, dieser Befehl ist nur in dieser eine Konsole in der ihr seid gültig und auch nur solange wie diese offen ist. Um die Änderung systemweit wirksam zu machen, müsst ihr in die Datei &amp;lt;tt&amp;gt;/etc/profile&amp;lt;/tt&amp;gt; den &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt; nachtragen. Bei mir sieht das z.B. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set the default system $PATH:&lt;br /&gt;
PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games[b]:/usr/local/avr/bin[/b]&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[binutils]]==&lt;br /&gt;
&lt;br /&gt;
Mit den binutils bekommt ihr Programme wie z.b. &amp;lt;tt&amp;gt;avr-as&amp;lt;/tt&amp;gt; (Assembler), &amp;lt;tt&amp;gt;avr-ld&amp;lt;/tt&amp;gt; (Linker), &amp;lt;tt&amp;gt;avr-objcopy&amp;lt;/tt&amp;gt; (Um die Intel-Hex-Files zu erstellen).&lt;br /&gt;
&lt;br /&gt;
Und so wird's gemacht (Das entpacken kann eine Weile dauern):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf binutils-2.16.1.tar.bz2&lt;br /&gt;
cd binutils-2.16.1/&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==[[avr-gcc]]==&lt;br /&gt;
&lt;br /&gt;
avr-gcc ist unser eigentlicher Compiler. Er installiert sich wie folgt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf gcc-core-4.0.2.tar.bz2&lt;br /&gt;
cd gcc-4.0.2&lt;br /&gt;
&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Falls ihr jetzt beim Installieren Fehler bekommt die sich z.B so äussern:&lt;br /&gt;
 make[2]: avr-ranlib: Command not found&lt;br /&gt;
Dann liegt &amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; wider erwarten nicht in &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;. Führt diesen Befehl als root nochmal aus, dann sollte es gehen:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==avr C-library ([[avr-libc]])==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf avr-libc-1.2.5.tar.bz2&lt;br /&gt;
cd avr-libc-1.2.5&lt;br /&gt;
&lt;br /&gt;
PREFIX=/usr/local/avr&lt;br /&gt;
export PREFIX&lt;br /&gt;
sh -x ./doconf&lt;br /&gt;
./domake&lt;br /&gt;
&lt;br /&gt;
cd build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[avrdude]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf avrdude-5.0.tar.gz&lt;br /&gt;
cd avrdude-5.0&lt;br /&gt;
./configure --prefix=/usr/local/avr&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
Wer den avr910 Programmer benutzt, muss avrdude erst fit für einige neuere Controller machen.&lt;br /&gt;
([[ATtiny2313]], [[ATmega162]], ...). Dazu müsst ihr die Configdatei von avrdude anpassen. Ihr findet sie unter &amp;lt;tt&amp;gt;/usr/local/avr/etc/avrdude.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Zeilen müssen ergänzt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATtiny2313&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
     id            = &amp;quot;t2313&amp;quot;;&lt;br /&gt;
     desc          = &amp;quot;ATtiny2313&amp;quot;;&lt;br /&gt;
     stk500_devcode   = 0x23;&lt;br /&gt;
##  Try the STK500 devcode:&lt;br /&gt;
   [b]avr910_devcode   = 0x23;[/b]&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATmega8535&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
    id               = &amp;quot;m8535&amp;quot;;&lt;br /&gt;
    desc             = &amp;quot;ATMEGA8535&amp;quot;;&lt;br /&gt;
    stk500_devcode   = 0x64;&lt;br /&gt;
   [b] avr910_devcode   = 0x69;[/b]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Analog verfahren für [[ATmega64]], [[ATmega162]] und [[ATmega169]]. Die devicecodes hiefür sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
m64:     avr910_devcode   = 0x45;&lt;br /&gt;
m162:    avr910_devcode   = 0x62;&lt;br /&gt;
m169:    avr910_devcode   = 0x78;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer sich einen eigenen avr910 Programmer bauen will, dem sei diese Seite ans Herz gelegt:&lt;br /&gt;
[http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/AVR-Programmer.html].&lt;br /&gt;
Ich habe die Version genommen und um ein Buffer erweitert. Die Bauanleitung dafür gibt es bald auf [http://www.amee-bot.de unserer Roboterseite]. &lt;br /&gt;
&lt;br /&gt;
Somit hätten wir nun alles was wir brauchen installiert.&lt;br /&gt;
&lt;br /&gt;
=Beispiel-Projekt=&lt;br /&gt;
&lt;br /&gt;
Hier erstmal ein winziges Beispielprogramm für den [[ATtiny2313]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *  blink.c&lt;br /&gt;
 *  ATTiny2313 mit 1 MHz&lt;br /&gt;
 *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht 3.81Hz&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIGNAL (SIG_TIMER0_OVF)&lt;br /&gt;
{&lt;br /&gt;
  PORTB =~ PORTB; // PORTB inventieren&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  DDRB  = 0xFF; // PORTB als Ausgang schalten&lt;br /&gt;
  PORTB = 0x00; // Alle Ausgaenge auf 0 schalten&lt;br /&gt;
&lt;br /&gt;
  TCCR0B |= (1 &amp;lt;&amp;lt; CS02) | (1 &amp;lt;&amp;lt; CS00); //Prescaler auf 1024 stellen&lt;br /&gt;
  TIMSK  |= (1 &amp;lt;&amp;lt; TOIE0);              // Timer 0 Overflow Interrupt enable&lt;br /&gt;
&lt;br /&gt;
  sei(); // Interrupts einschalten&lt;br /&gt;
&lt;br /&gt;
  for(;;); //ever&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Quelltext nehmt ihr und speichert ihn in die Datei &amp;lt;tt&amp;gt;blink.c&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt das [[make|Makefile]]. Ich habe schonmal ein einfaches vorbereitet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TARGET = blink&lt;br /&gt;
MCU    = attiny2313&lt;br /&gt;
CC     = avr-gcc&lt;br /&gt;
OBJCOPY=avr-objcopy&lt;br /&gt;
CFLAGS =-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -save-temps -fno-common&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex : $(TARGET).out&lt;br /&gt;
	$(OBJCOPY) -R .eeprom -O ihex $(TARGET).out $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).out : $(TARGET).o&lt;br /&gt;
	$(CC) $(CFLAGS) -o $(TARGET).out -Wl,-Map,$(TARGET).map $(TARGET).o&lt;br /&gt;
&lt;br /&gt;
$(TARGET).o : $(TARGET).c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $(TARGET).c&lt;br /&gt;
&lt;br /&gt;
load: $(TARGET).hex&lt;br /&gt;
	avrdude -p t2313 -c avr910 -U flash:w:$(TARGET).hex -v&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f *.o *.map *.out *.hex *.s *.i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das speichert ihr in der Datei &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; im selben Ordner in der auch die Datei &amp;lt;tt&amp;gt;blink.c liegt&amp;lt;/tt&amp;gt;. '''Unbedingt darauf auchten, daß die Einrückungen durch TABs erfolgen und nicht durch Leerzeichen!'''&lt;br /&gt;
&lt;br /&gt;
Dann einfach in der Konsole &amp;quot;&amp;lt;tt&amp;gt;[[make]]&amp;lt;/tt&amp;gt;&amp;quot; tippen und es sollte compiliert werden. Mit &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; wird das Hexfile dann in den MCU übertragen.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;MCU=attiny2313&amp;lt;/tt&amp;gt; ist eine Variable mit dem Inhalt &amp;lt;tt&amp;gt;attiny2313&amp;lt;/tt&amp;gt;. Überall, wo jetzte &amp;lt;tt&amp;gt;$(TARGET)&amp;lt;/tt&amp;gt; steht, wird der Variabelninhalt benutzt. Genauso funktioniert das auch mit &amp;lt;tt&amp;gt;CC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;OBJCOPY&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt;. Nachdem ihr &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; erfolgreich ausgeführt habt, liegt in dem Ordner die Hexfile und eine Datei mit der Endung &amp;lt;tt&amp;gt;&amp;amp;nbsp;.s&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Darin sind die Assemblerbefehle, die der Compiler aus dem C-Code gemacht hat. Wer so etwas nicht braucht, der kann den Parameter &amp;lt;tt&amp;gt;-save-temps&amp;lt;/tt&amp;gt; in der Variable &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt; getrost entfernen.&lt;br /&gt;
&lt;br /&gt;
Wenn ihr &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; ausfürt, wird avrdude gestarte.&lt;br /&gt;
;&amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt;: gibt an, um welchen MCU es sich handelt&lt;br /&gt;
;&amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;: gibt an, um welchen Programmer es sich handelt. Hier könnte z.B &amp;lt;tt&amp;gt;stk500&amp;lt;/tt&amp;gt; stehen.&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;-U flash:w:$(TARGET).hex&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: bedeutet einfach, dass das Programm in den Flash geschrieben werden soll. &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; steht für Schreiben, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; für Lesen und &amp;lt;tt&amp;gt;v&amp;lt;/tt&amp;gt; für verify. Dann kommt die Variable &amp;lt;tt&amp;gt;$(TARGET)&amp;lt;/tt&amp;gt;, die besagt, welche Datei genau übertragen werden soll. &lt;br /&gt;
;&amp;lt;tt&amp;gt;-v&amp;lt;/tt&amp;gt;: bedeutet ''&amp;quot;Verbose Output&amp;quot;'' und gibt euch mehr Informationen auf der Konsole aus.&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;tt&amp;gt;make clean&amp;lt;/tt&amp;gt; werden alle Object-Dateien etc. gelöscht.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen=&lt;br /&gt;
&lt;br /&gt;
sollten eigentlich keine vorkommen. Wenn doch, vergewissert euch, dass ihr euch genau an die&lt;br /&gt;
Anleitung gehalten und nichts falsch abgeschrieben habt!&lt;br /&gt;
&lt;br /&gt;
Hier ein paar typische Fehlermeldungen und ihr Lösungen:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;Permission denied&amp;lt;/tt&amp;gt;: Ihr habt nicht die Rechte, um diesen Befehl auszuführen. Höchswahrscheinlich müsst ihr den Befehl als root ausführen.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;make[2]: avr-ranlib: Command not found&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;:&amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; liegt nicht in &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt;. Folgendes Command ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;export PATH=$PATH:/usr/local/avr/bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;programmer is not responding&amp;lt;/tt&amp;gt;: Es kann keine Verbindung zum Programmer aufgenommen werden: Defektes Kabel, Programmer an der falschen Schnittstelle angeschlossen (default: &amp;lt;tt&amp;gt;/dev/ttyS0&amp;lt;/tt&amp;gt;), kein Strom am Programmer etc.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;can't open device &amp;quot;/dev/ttyS0&amp;quot;: Permission denied&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: Als normaler User darf man auf die Serielle Schnittstelle nicht lesen oder schreiben. Folgenden Befehl als root ausfueren:&lt;br /&gt;
:&amp;lt;pre&amp;gt;chmod 666 /dev/ttyS0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zweite,bessere Möglichkeit die Rechte zu ändern ist es, den Benutzer in die tty Gruppe auzunehmen.&lt;br /&gt;
Hier ein Beispiel für Gentoo.&lt;br /&gt;
Die Gruppe kann bei anderen Distributionen auch anders heißen!&lt;br /&gt;
&lt;br /&gt;
Als root in die Konsole schreiben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sebastian@pegasus ~ $ ls -all /dev/ttyS0&lt;br /&gt;
crw-rw---- 1 root tty 4, 64 25. Jun 02:12 /dev/ttyS0&lt;br /&gt;
&amp;lt;sebastian@pegasus ~ $&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier kann man schön erkennen, daß die serielle Schnittstelle dem Benutzer root gehört, und die Gruppe tty&lt;br /&gt;
darauf zugreifen darf.&lt;br /&gt;
Mit einem einfachem&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pegasus sebastian #usermod -a -G tty sebastian&lt;br /&gt;
pegasus sebastian #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
wird der user sebastian in die tty Gruppe aufgenommen.&lt;br /&gt;
&lt;br /&gt;
Noch ein Test, ob alles geklappt hat:&lt;br /&gt;
&amp;lt;pre&amp;gt;pegasus sebastian # groups sebastian&lt;br /&gt;
tty wheel audio cdrom dialout video games usb users portage scanner&lt;br /&gt;
pegasus sebastian # &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jetzt muß sich nur noch der Benutzer sebastian neu einlogen und wir sind fertig.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Vorteil hierbei ist, man erlangt rechte für alle Geräte die der Gruppe tty angehören, also alle seriellen Schnittstellen sowie USB &amp;lt;-&amp;gt; Rs232 Adapter, und man braucht an den eigentlichen Rechten nichts zu verändern.&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
&lt;br /&gt;
=Quelle=&lt;br /&gt;
[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=125603#125603]&lt;br /&gt;
&lt;br /&gt;
=Autoren=&lt;br /&gt;
*[[Benutzer:Kater|Kater]] (Manuscript)&lt;br /&gt;
*[[Benutzer:SprinterSB|SprinterSB]] (Transcript und Typo)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;/div&gt;</summary>
		<author><name>Izaseba</name></author>	</entry>

	</feed>