Hallo
Du könntest auf #include komplett verzichten, wenn du den Inhalt von asuro.h in deiner Datei test.c vor und den Inhalt von asuro.c hinter deine eigene main()-Funktion kopieren würdest. Beim Kompilieren würde der Kompiler dann die Namen aller definierten Dinge (Funktionen, #defines, Variablen oder auch Register und Pins des Kontrollers) kennen bevor du sie in main() verwendest. Weiterhin würde er alle Funktionen hinter main() mit übersetzen und von main() aus anspringen wenn du sie in main() verwendest.
Mit #include eingebundene Dateien werden in das Programm direkt an der Stelle eingefügt, an der das #include steht, quasi wie reinkopiert. Prinzipiel funktioniert deshalb auch ein #include asuro.c Das ist aber "verpöhnt", weil man .c-Dateien über das Projekt einbinden sollte.
Der Unterschied ist etwa so: Wenn über das Projekt eingebunden wird erzeugt der Kompiler beim Übersetzen zwei Objektdateien mit den in Maschinensprache übersetzten C-Befehlen (aus test.c und asuro.c) und der Linker verbindet dann beide zu einem Programm und legt die Speicherbereiche so fest das alles passt (Funktionsadressen, Variablenspeicherplätze...) und erzeugt schließlich aus der Maschinensprache ein Speicherabbild des Programms im AVR als Hex-Datei. Bei Einbindung mit #include asuro.c wird nur eine Objektdatei erzeugt.
Das ist eigentlich nur ein Teil der Wahrheit, denn in Wirklichkeit werden noch viel mehr Dateien eingebunden (siehe Anfang von asuro.h) Das erzeugte Maschinenprogramm heißt übrigends Projektname.lst Darin sieht man dann neben den eigenen Funktionen auch die übersetzten Funktionen der asuro-Library. Hier mal ein einfaches Beispiel:
PHP-Code:
#include "asuro.h"
#include "asuro.c"
int main(void)
{
Init();
StatusLED(RED);
while (1);
return(0);
}
Zur LST-Datei im Anhang:
Wegen #include asuro.c sieht man auch die Lib-Funktionen, ab Zeile 303 der Code für StatusLED(), ab Adresse 0x019e beginnt der eigentliche Code. In Zeile 1105 beginnt main(), in Zeile 1116 wird die Funktion StatusLED() aus main() heraus aufgerufen. In Zeile 1115 wird übrigends das Register r24 mit 2 geladen. Ab Zeile 333 wird durch diese 2 dann die rote Led ein- und die grüne Led ausgeschaltet. Aber ich glaube, ich schweife ab...
Aller Anfang ist schwer. Die Microkontroller sind kein Spielzeug, das ist echte Hightech. Deshalb ist das auch so kompliziert. Aber wenn du dir mal die Grundlagen erarbeitet hast wird's noch schlimmer 
Gruß
mic
Lesezeichen