globale Arrays

OP #1343124
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.