Forum: Mikrocontroller und Digitale Elektronik include? .h oder .c?


von Marc (Gast)


Lesenswert?

Tag, die Herren und evtl. Damen!
Kurze Fräge: Winavr, Routinen für Ansteuerungen e. Peripherie 
geschrieben, sollen aus hauptprogramm aufgerufen werden, also include 
nötig. Im Moment liegt der Quelltext der Funktionen in einer Datei 
subroutines.c. Sollte es dann im Hauptprogramm besser
#include "subroutines.c" heissen, oder
#include "subroutines.h" ?
Kann ich in einer .h eigentlich Quelltext unterbringen oder gehen da nur 
Funktionsdeklarationen und defs? Macht das Compilier- oder 
Speichertechnisch (.hex-grösse) einen Unterschied?

Grüsse,

Marque

von Robert S. (razer) Benutzerseite


Lesenswert?

Es heißt #include subroutines.h.

Dem Linker musst du nun noch die C Datei mitteilen. das machst du, wenn 
du das Makefile benutzt mit SRC += subroutines.c

von Oliver (Gast)


Lesenswert?

Machen kann man das, wie man will. #include fügt schließlich nur die 
inkludierte Datei genau an dieser stelle ein. Aber bewährter, robuster, 
und üblicher Stil ist es, Quellcode NIEMALS per include in andere 
Dateien einzubinden.

Quellcode gehört in .c-Dateien. Zu jeder .c-Datei sollte es eine 
.h-Datei geben, die die nach aussen sichtbaren Definitionen enthält. 
(Also defines, Funktionsprototypen, externe globale Variablen usw.). Nur 
diese .h-Dateien werden in andere .c-Dateien includiert.

Alle .c-Dateien werden im makefile aufgelistet. Der linker baut die dann 
zusammen. Dafür ist der da.

Oliver

von Marc (Gast)


Lesenswert?

Danke!
Ich geh mal davon aus, dass die sub.c und sub.h dann auch im gleichen 
verzeichnis wie die main.c liegen muss. Wo im makefile definiere ich 
denn eigentlich die zu linkenden subs?

von Karl H. (kbuchegg)


Lesenswert?

Marc wrote:
> Danke!
> Ich geh mal davon aus, dass die sub.c und sub.h dann auch im gleichen
> verzeichnis wie die main.c liegen muss.

Keineswegs.
In einem #include kann man sehr wohl auch Pfadangaben machen.

Und beim linken gibt man ebenfalls den Pfad zum Object File
an.

von Oliver (Gast)


Lesenswert?

>Wo im makefile definiere ich
>denn eigentlich die zu linkenden subs?

Im makefile gibt es die Zeile
# List C source files here. (C dependencies are automatically 
generated.)
SRC = $(TARGET).c

hinter $(TARGET).c kannst du die weiteren source-files anhängen.

Am einfachsten nimmst du mfile (befindet sich im Startmenu unter WinAVR) 
zur Erstellung des makefiles. Danach kannst du dir dann im makefile 
ansehen, wie das aussieht.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.