Forum: Mikrocontroller und Digitale Elektronik Variablen in einer Header Datei deklarieren


von C Anfänger (Gast)


Lesenswert?

Hallo zusammen.
Ich bin relativ neu dabei mit Controllern zu experimentieren. Nun habe 
ich die ein oder andere Sache schon programmiert und meine Apps werden 
größer.
Da ich aus Gründen der Übersichtlichkeit mehrere Source Code Files habe, 
aber in mehreren Files die selbern Variablen benötige hatte ich überlegt 
diese in einer Header Datei zu deklarieren und dieselbe überall 
einzubinden. Der Grund zu meiner Überlegung ist der das mir die 
Übersicht und die Lust abhanden kommt immer in mehreren Files Variablen 
als extern zu deklarieren.
Danke für Hilfestellungen und Anregungen!
Mfg Thomas

von PM (Gast)


Lesenswert?

Und ? wo ist da jetzt die Frage?

/Glaskugel on
Nehme mal an Du hast das gemacht, und bekommst vom Linker jede Menge 
Fehler...
/Glaskugel off

Mein vorschlag, ein "Globale" Haeder Datei nehmen die überall 
eingebunden wird (im Header der jeweiligen Datei), welche die Datei über 
extern(dafür ist das ja da) bekannt macht. Und an einer (sinnvollen) 
Stelle wird dann die Variable tatsächlich deklariert. Natürlich in einem 
c File. Variablendeklaration hat in einer Header Datei nix zu suchen...

von Frank N. (betafrank)


Lesenswert?

Du könntest das z.B. so lösen:

global.h:
extern uint8_t GlobalVar;

global.c:
uint8_t GlobalVar;

modul_x.c:
#include "global.h"

void myFunc1(void){
  GlobalVar=5;
}

modul_y.c:
#include "global.h"

void myFunc2(void){
  if(GlobalVar>4)
    PORTB=255;
}

Ansich sollte natürlich versucht werden, die Module so "gekapselt" wie 
möglich zu gestalten und die Verwendung programmglobaler Variablen zu 
minimieren.

Gruß Frank

von Tobias K. (kurzschluss81)


Lesenswert?

Hallo
Genau was hier beschrieben wurde habe ich gemacht.
Trotzdem meckert mein Linker rum, das er die von mir verwendete Variable 
nicht findet.
Ich verwende den aktuellen IAR MSP430 Compiler

von Tobias K. (kurzschluss81)


Lesenswert?

Meine Frage hat sich erledigt. Hab den Fehler gefunden.

von Johannes (Gast)


Lesenswert?

Eine andere Möglichkeit wäre es, die Variablen als extern zu 
deklarieren.
Bei meinem Projekt wird z.B. eine Struktur vom Typ config in der Datei 
config.c deklariert. In allen anderen c-Dateinen, die diese Struktur 
benutzen, steht oben

extern configuration config;  // import global variable from main file

Der Linker löst das dann auf.

Johannes

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.