Forum: Mikrocontroller und Digitale Elektronik Die .c und .h Dateien richtig in meine Projekte einbinden


von Marcel K. (viewer)


Lesenswert?

Hallo Forumgemeinde,

ich habe eine Frage wie ich meine .c und .h Dateien richtig in meine 
Projekte einbinden kann. Ich brauche z.B. in einem neuen Projekt zum 
testen ein LCD. Ich habe aber mehrere LCD’s und somit auch 
unterschiedliche .c und .h Dateien zur Verfügung. Da gibt z.B. die 
"hd44780" .c und .h Datei, oder die "T6963C" .c und .h Datei.
Ich habe auf meiner Festplatte folgende Ordnerstruktur:



…[WINAVR]
         [My_includes]
                      [lcd]
                           Lcd.h
                           [hd44780]
                                    hd44780.c
                                    hd44780.h
                           [t6963c]
                                    t6963c.c
                                    t6963c.h
                           …
         [Projekte]
                      [Projekt1]
                      [Projekt2]
       …

Wenn ich jetzt ein neues Projekt anfange, dann wäre es super wenn ich 
einfach nur noch die "lcd.h" in das Projekt einbinde. Dort habe ich dann 
über:

#if defined(HD44780)
#include <lcd\hd44780\hd44780.h>
…

Die unterschiedlichen .c und .h Dateien eingebunden.
So wie ich mir das aber vorgestellt habe, geht es nicht da ich in dem 
neuen Projekt dann noch die "hd44780.c" Datei mit einbinden muss. Es ist 
mir schon klar, dass der Compiler diese Datei braucht aber wenn ich 
diese Datei einbinden muss dann kann ich auch gleich die .h Datei 
einbinden und mir das ganze mit der globalen "lcd.h" sparen.
Was mir noch eingefallen ist, man könnte eine einzige "lcd.c" und 
"lcd.h" Datei erstellen und dann dort für jede Funktion über "#ifdef…" 
abfragen welchen Quellcode ich möchte aber so ist das alles andere als 
übersichtlich. Das will ich sicherlich nicht.

Ich hoffe Ihr hier im Forum wisst was ich meine… Ich würde gerne 
irgendwo eine Definition machen und dann wird automatisch die richtige 
.c und .h Datei "compeliert"

Ich hoffe ihr könnt mir weiterhelfen…

Viele Grüße,
Marcel

von Karl H. (kbuchegg)


Lesenswert?

Marcel K. schrieb:

> Was mir noch eingefallen ist, man könnte eine einzige "lcd.c" und
> "lcd.h" Datei erstellen und dann dort für jede Funktion über "#ifdef…"
> abfragen welchen Quellcode ich möchte

Genau so würde ich das machen.
Zumindest war das mein erster Gedanke, als ich angefangen habe dein 
Problem zu lesen.

> so ist das alles andere als
> übersichtlich.

Ja, aber nur im lcd.c
Derjenige der die lcd.c benutzt, hat damit ja nichts zu tun. Von daher 
wäre es vertretbar. Im Zweifelsfall ist immer die einfache Verwendung im 
Vordergrund.

von Marcel K. (viewer)


Lesenswert?

Hallo Karl heinz. Du bist einer von denen die ja richtig viel Ahnung 
haben. Wie machst du denn das?? Wie bindest du z.B. ein Display in ein 
neues Projekt ein? Kopierst du dir die "aktuelle" .c und .h Datei vom 
letzten Projekt und bindest sie dann dort ein oder hast du einen 
"globalen"- Platz wo die Datei gespeichert ist und bindest sie über 
diesen Pfad ein??

Grüße, Marcel

von Karl H. (kbuchegg)


Lesenswert?

Marcel K. schrieb:

> "globalen"- Platz wo die Datei gespeichert ist und bindest sie über
> diesen Pfad ein??

Über den Pfad.
Allerdings habe ich immer denselben Typ von LCD :-)

Aber wenn ich mehrere hätte, würde ich das mittels #ifdef und #include 
lösen. Auch beim lcd.c

von Marcel K. (viewer)


Lesenswert?

Hmmm, das ist echt ne schwere Entscheidung!!
Ich habe z.B. auch das EA_DIP204 im SPI-Mode. Wenn ich dieses Display 
auch noch mit einbinden möchte dann explodiert die Übersichtlichkeit!
Ich denke es ist dann echt besser wenn ich jedes Display über den Pfad 
einbinde und es nicht über eine globale .h Datei mache!
Außerdem, wenn ich jemanden meinen Quellcode z.B. zum T6963C schicken 
will dann müsste ich den ganzen Rest mit schicken. Das ist nicht so 
toll!! :o(

Naja ich sage mal Danke für deine Hilfe...

Viele Grüße,
marcel

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.