Grundsätzliche Frage zu C (M16C)

#2306571
Lesenswert?

Hallo,

Variablen Deklaration
  kommt darauf an wo man sie braucht (im Hauptprogramm, in der 
Funktion).
  Dort deklariert man sie dann.
Constanten
  Ich schreibe die Konstanten, die ich im Library (*.h-Datei) brauche 
ins Library (*.h-Datei) und die Konstanten, die ich im Hauptprogramm 
brauche ins Hauptprogramm (*.c-Datei). Man könnte auch alle ins 
Hauptprogramm schreiben, oder umgekehrt.
Definition von Funktionen
  Ins Library (*.h-Datei)
Programmcode der Funktionen
  Ins Library (*.h-Datei)

MfG
Fabian
#2306661
Lesenswert?

> Den Programmcode, der in der Funktion abgearbeitet wird, schon.

Nein.

Obwohl man das so pauschaul auch nicht sagen kann. Ist man auf inlining 
aus, muss der Code in den Header.

Aber abgesehen davon

modul.c
*******
1
Alle Funktionen, die das Modul ausmachen

modul.h
*******
1
Alle Variablen und Funktionsprotoypen, die das Modul einem
2
Verwender zur Verfügung stellt.


Ist ganz einfach:
In *.c File kommt die Implementierung. Im Header File wird die 
'Schnittstelle' beschrieben, die ein Verwender des Moduls benötigt, um 
mit dem MOdul zu arbeiten. Das sind im Regelfall die 
Funktionsprototypen, aber auch Strukurdefinitionen, die zb in 
Funktionsaufrufen benutzt werden. IN einzelnen Fällen können dann auch 
noch globale Variablen vorkommen, mit denen man aber eher sparsam sein 
sollte.
#2306695
Lesenswert?

Fabian K. schrieb:
> Soweit bin ich noch nicht, dass ich mehrere c-Dateien habe.

Dann solltest du vielleicht nicht unbedingt jemanden beratschlagen :-)

> Bis jetzt
> hab ich genau eine c-Datei fürs Hauptprogramm, der Rest kommt in libs.

Du hast ganz sicher keine Libs.
Ein Header-File ist keine Lib :-) Selbst dann nicht, wenn hier im 
µC-Forum so gaten wird, als ob ein abgetrennter Code eine Lib wäre. Aber 
genau genommen ist eine Lib etwas ganz anderes. Wenn du jemals auf 
Desktop Systemen programmierst, wirst du den Unterschied kennen lernen.
Gast #2306720
Lesenswert?

Danke schon mal an alle.

Ich habe jetzt also ein Modul bestehend aus einer *.h und einer *.c 
Datei. Dieses Modul möchte ich in mehreren Projekten verwenden. Deswegen 
packe ich beide Dateien in ein "Lib" Verzeichnis. Nun ist die Sache aber 
so in dem Modul wird z.B. ein Pin gesetzt in einem Projekt ist dies P1_2 
in einem anderen Projekt P3_4. In dem Modul habe ich für diesen Pin 
einen Namen deklariert z.b.

#define dummy_pin p1_2

Wo deklariere ich dies am besten, damit ich a) das Modul in einem 
gemeinsamen Verzeichnis ablegen kann und ohne ins Projekt zu kopieren 
verwenden kann und b) ich bei jedem Projekt den dummy_pin an einem 
anderem Portpin deklarieren kann?
#2306724
Lesenswert?

Eine Library wird so gebaut:

Zuerst wird der Code aufgeteilt. So wie oben

C-File:       Implementierung
Header File:  Schnittstellenbeschreibung

Dann wird das C-File für sich getrennt kompiliert.
Möglicherweise zusammen mit einigen anderen C-Files, die zusammen die 
Library bilden sollen.

Dann nimmt man einen Librarien und bindet all die Object-Files, die man 
vom Compiler für die Einzelteile bekommen hat, zu einer Library 
zusammen.


Dem Kunden, also dem der die Library verwendet, gibt man dann die 
Library selber und die Header Files. In den Header Files finden sich all 
die Beschreibungen und Prototypen wieder, die der Verwender benötigt um 
die Funktionen in der Library aufrufen zu können. Das tut er auch. Er 
compiliert sein Programm und linkt die Library dazu, die dann die 
Implementierungen für die Funktionen liefert.

Vorteil:
* Alle Funktionen sind gemeinsam in einem File, der Library, beisammen. 
Der Verwender muss nur die Lib einlinken und hat alles auf einen Schlag 
verfügbar.
* Der Verwender muss sich nicht mit Compiler Settings rumschlagen, um 
die zugelieferten Funktionen kompilieren zu können. Denn die sind schon 
vorkompiliert in der Library
* Ich kann einem Verwender eine Funktionalität zur Verfügung stellen, 
ohne dass ich ihm den Source Code geben muss. -> Ich kann mein Know-How 
verkaufen, ohne jemanden in meine Karten schauen lassen zu müssen.
Gast #2306726
Lesenswert?

Ah ich glaube ich habs.

Ich lege eine "pin_def.h" Datei in mein Projekt-Verzeichnis. Diese 
Header Datei include ich dann in der Modul.c Datei. So kann bei jedem 
Projekt eine andere Pinzuordnung erfolgen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren