Forum: Compiler & IDEs gleiche Variablen in mehreren Source Dateien verwenden


von churchi (Gast)


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

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.

von churchi (Gast)


Lesenswert?

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

von Werner B. (Gast)


Lesenswert?

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 :(

von churchi (Gast)


Lesenswert?

Das habe ich schon probiert.
Leider funktioniert es nicht.

von Chris (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

@Chris
ACK

Können ja warten, bis Jörg Wunsch auf den Thread stößt, er kann da die
qualifizierteste Antwort geben, denke ich.

von Jörg Wunsch (Gast)


Lesenswert?

:-)

extern PGM_P system[];

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

von churchi (Gast)


Lesenswert?

Leider bekomme ich wenn ich

extern PGM_P system[];

schreibe folgenden Fehler:
error: parse error before "system"

von Chris (Gast)


Lesenswert?

Du hast höchstwahrscheinlich <avr/pgmspace.h> nicht eingebunden, kann
das sein?

von churchi (Gast)


Lesenswert?

damn - stimmt
überall hab ich die eingebunden - nur in der einen h Datei nicht
hmpf

thx - jetzt funktionierts!

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.