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.
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.
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
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 :(
Das habe ich schon probiert. Leider funktioniert es nicht.
> 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.
@Chris ACK Können ja warten, bis Jörg Wunsch auf den Thread stößt, er kann da die qualifizierteste Antwort geben, denke ich.
:-) extern PGM_P system[]; in main.h sollte als Deklaration genügen. Definiert (und damit initialisiert) werden sie nur in einer Datei dann.
Leider bekomme ich wenn ich extern PGM_P system[]; schreibe folgenden Fehler: error: parse error before "system"
Du hast höchstwahrscheinlich <avr/pgmspace.h> nicht eingebunden, kann das sein?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.