Forum: Compiler & IDEs globale Arrays


von Holger P. (holgerp)


Lesenswert?

Moin Leute,

ich habe da mal eine Frage zu globalen Arrays.

Folgende Situation ist gegeben:

es gibt ein global.h in dem alle globalen Variaben, defines ... 
definiert sind. Auch mein globales Array so

#define EEP_ADDR 0x0250 // zum speichern im EEProm
#define gArrLen         10
u08 gAccDateTime[gArrLen];

diese Array wird in der Main Funktion teilweise mit Daten gefüllt und in 
dem util.c auch teilweise mit Daten gefüllt und später im Main wieder 
verwendet - auf die gefüllten Daten zugegriffen.

Ist das so iO oder ehr ungeschickt gelöst. Sollte man eventuell lieber 
das Array zu dem jeweiligem *.C File übergeben also einer Funktion ...
Wie sieht es dann mit dem Speicherverbrauch - Stack aus?? Oder wie löst 
Ihr solche sachen geschickt ??

Danke Holger.

von Karl H. (kbuchegg)


Lesenswert?

Holger Patz schrieb:

> es gibt ein global.h in dem alle globalen Variaben, defines ...
> definiert sind. Auch mein globales Array so
>
> #define EEP_ADDR 0x0250 // zum speichern im EEProm
> #define gArrLen         10
> u08 gAccDateTime[gArrLen];
>


keine gute Idee.
Die Definition von Variablen hat in Header Files nicht wirklich was 
verloren. In ein Header File gehören die Deklarationen. Die Definiton 
selbst ist in einem deiner *.c Files, jenachdem wo es Sinn macht.

http://www.mikrocontroller.net/articles/FAQ#Globale_Variablen_.C3.BCber_mehrere_Dateien

> Ist das so iO oder ehr ungeschickt gelöst.

Kann in Ordnung sein.

> Sollte man eventuell lieber
> das Array zu dem jeweiligem *.C File übergeben also einer Funktion ...

Kommt darauf an, was die Funktion macht. Wenn die Funktion in deinem 
Programm so speziell ist, dass du sie sowieso nie in irgendeinem anderen 
Programm wiederverwenden willst, ist das globale Array schon in Ordnung.

> Wie sieht es dann mit dem Speicherverbrauch - Stack aus??

Ist kein Problem.
Arrays werden sowieso nicht übergeben, sondern lediglich die 
Startadresse des Arrays im Speicher wird an die Funktion übergeben.
Siehe zb. jedes beliebige C-Buch

> Oder wie löst
> Ihr solche sachen geschickt ??

Ich versuche Funktionen nach Möglichkeit so selbstständig wie möglich 
und mit so wenig Abhängigkeiten nach aussen wie vernünftig zu gestalten. 
Das erleichtert das Übernehmen einer Funktion von einem Projekt in ein 
anderes enorm, wenn man einfach nur die Funktion umkopieren und sich 
nicht um 100-tausend globale Variablen auch noch kümmern muss. Je 
kleiner der Scope von Variablen ist, desto einfacher ist eine 
Wiederverwendung von Funktionen ohne Gefahr zu laufen, dass sich die 
Namen von globalen Variablen in die Haare kommen.

von Holger P. (holgerp)


Lesenswert?

Ok, werde es gleich mal ändern.

Danke Karl-Heinz

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.