www.mikrocontroller.net

Forum: Compiler & IDEs globale Arrays


Autor: Holger Patz (holgerp)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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#Global...

> 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.

Autor: Holger Patz (holgerp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, werde es gleich mal ändern.

Danke Karl-Heinz

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.