Zitat Zitat von jagdfalke
Warum werden die Packete io.h aud stdint.h hinter # eingebunden? Ich dachte # markiert Kommentare !?
Kommentare in C werden mit /* begonnen und mit */ wieder beendet. Es gibt auch die Kurzform // um bis zum Zeilenende auszukommentieren, aber das ist kein ANSI-C. Geht aber mit avr-gcc (ohne Option -ansi natürlich )

# gehört eigentlich nicht zu C. Das kennzeichnet Präprozessor-Dirktiven wie

#include
#define
#undef
#if
#ifdef
#else
#endif
#error
#warning
#pragma

Bevor der eigentliche Compiler zum Zuge kommt rauscht ein Präprozessor über die Quelle und macht Textersatz.

Wenn du zB hinschreibst PINB (ein in avr/ioxxxx.h definiertes Makro), macht der Präprozessor so was draus:

(*(volatile uint8_t *)((0x16) + 0x20))

Für nen Compiler ist das verständlich, für Menschen weniger. Es bedeutet so viel wie "Inhalt der Speicherstelle an Adresse 0x36". An dieser Adresse liegt das ober werklärte PINB-Register -- zumindest beim ATMega8. Über das Makro PINB kann man besser leserlich auf dieses Register zugreifen.

Zitat Zitat von jagdfalke
Warum gibt main ein int zurück? Ich komme von Java, und da gibt main nix zurück, warum auch !? Andereseites steht in Klammern "void", was bei Java heißt, dass eine Methode nix zurückgibt. (das versteh einer :S)
In Java bedeutet das nicht, daß eine Funktion nix zurückgibt, sondern daß sie keine Parameter hat. In C ist das genauso. main() hat keine Eingabeparameter -- woher auch.
main() gibt allerdinge einen int zurück. Das ist Konvention in C, um Werte an eine shell zurück zu liefern. In Java müsste man das mit System.exit(xxx) machen. Auf einem embedded System läuft keine shell, daher ist das return int unnötig. Wenn man aber hinschreibt

void main()

bekommt man eine lästige Compiler-Warnung. Diese vermeidet man mit der gcc-Option -ffreestanding, die sagt, daß das Programm alleine läuft, also nicht in einer Umgebung mit shell.

Zitat Zitat von jagdfalke
btw: kann der AVR Rekursion? (ist ja sehr ram-intensiv)
Der AVR kann alles, was ein Compiler ihm in der Lage ist zu verklickern
Für avr-gcc heisst das: Rekursion geht.
Speicherverbrauch ist ein kritisches Thema auf nem Hänfling wie AVR. Da muss man schon ein Auge drauf haben...