gleiche Variablen in mehreren Source Dateien verwenden

Gast #180996
Hi

Ich habe folgendes Problem:
In der Datei main.c definiere ich folgende Variablen:

const char system1[] PROGMEM = "System running";
const char system2[] PROGMEM = "Suchen nach Geraet";
const char system3[] PROGMEM = "--> Geraet nicht gefunden";
const char system4[] PROGMEM = "--> Geraet gefunden";
PGM_P system[4] PROGMEM = {system1,system2,system3,system4};

nun möchte ich diese Variablen auch in einer anderen Sourcedatei
verwenden.
Egal in welcher Datei ich diese definiere, in der anderen findet er sie
nicht.

Wie kann man dieses Problem lösen?
Ich könnte natürlich die Variablen nochmal definieren - aber das würde
nur den Speicherplatz vermindern und das Ändern von dem Text
umständlicher machen.

Ich hoffe es kann mir jemand helfen.

Ich verwende WinAVR-20040720.
Gast #180997
Variablen in der main.h deklarieren. Die main.h dann überall einbinden,
wo die Variablen benötigt werden. Prinzipiell immer in *.c und *.h -
Dateien aufsplitten, so kann man Funktionen und Variablen
dateiübergreifend einfach miteinander verbinden. Im Makefile noch
angeben, welche *.c-Dateien für das Projekt benötigt werden.
Gast #180998
das geht nicht
1. in den *.h Dateien sollte man gar keine Variablen definieren
2. wenn man die main.h dann überall einfügen würde, dann wird die
Variable immer wieder Deklariert --> Fehler
Gast #180999
Zusätzlicher Kommentar zu Mike.

In der main.h als "extern" deklarieren.

Ich weiss jetzt nicht wie man das mit PGM_P [] PROGMEM macht,
aber generell bei normalen RAM Typen:

In einer header-datei deklarieren.

  extern char *system[];

In einer c-datei definieren

  char *system[} = { "abc", "def", "geh", };

Jetzt kann jede datei die den header included auf system[n] zugreifen.

Die verschieden Speicher-"Typen" der Harvard Architektur des VAR
machen das ganze etwas komplizierter :(
Gast #181001
> das geht nicht
> 1. in den *.h Dateien sollte man gar keine Variablen definieren
Mike sprach ja auch von "deklarieren", wenn ich mich nicht täusche.
Gast #181003
:-)

extern PGM_P system[];

in main.h sollte als Deklaration genügen.  Definiert (und damit
initialisiert) werden sie nur in einer Datei dann.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.