mikrocontroller.net

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


Autor: churchi (Gast)
Datum:

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

Autor: Mike (Gast)
Datum:

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

Autor: churchi (Gast)
Datum:

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

Autor: Werner B. (Gast)
Datum:

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

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das habe ich schon probiert.
Leider funktioniert es nicht.

Autor: Chris (Gast)
Datum:

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

Autor: Mike (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-)

extern PGM_P system[];

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

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider bekomme ich wenn ich

extern PGM_P system[];

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

Autor: Chris (Gast)
Datum:

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

Autor: churchi (Gast)
Datum:

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

thx - jetzt funktionierts!

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.