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ürlichZitat von jagdfalke
)
# 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.
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.Zitat von jagdfalke
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.
Der AVR kann alles, was ein Compiler ihm in der Lage ist zu verklickernZitat von jagdfalke
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...
Lesezeichen