Forum: Compiler & IDEs Probleme mit Progmem


von LtData (Gast)


Lesenswert?

Hallo!

ich möchte Text fürs LCD im Programmspeicher ablegen. Nur bekomme ich 
das mit progmem nicht hin.
schreibe ich sowas wie
char lcd[] _attribute_ ((progmem)) = "xxx";
bekomme ich vom Compiler:
warning: `progmem' attribute ignored
Und der Text findet sich anschliessend im RAM wieder.

probiere ich:
char *lcd = PSTR("xxx");
funktioniert das, blos ich kann anschliessend nicht mit
char buchstabe = PRG_RDB(lcd+position);
drauf zugreifen. Das liefert dann nämlich genau gar nix zurück und mein 
Display zeigt nix an.

Wodran liegts? Ich habe übrigens die neueste AVR-GCC version von 
avrfreaks.net

von Christian Schifferle (Gast)


Lesenswert?

Hallo LtData

Ich habe gerade so was in der Art gemacht.

Ablegen der Strings im ProgMem:

char *s1=PSTR("Dies ist ein String");

Die Anweisung muss innerhalb einer Funktion stehen, sonst motzt der 
Compiler.

Für die Weiterverearbeitung musst du dann den String aus dem ProgMem 
zurück kopieren. Dazu gibt es folgende Funktion:

char szBuf[genügend gross für den grössten abgelegten String];
strcpy_P (szBuf, s1);

Bei mir funktioniert das prima.

Gruss
Christian

von LtData (Gast)


Lesenswert?

ich habe es jetzt anders lösen können:

uint16_t lcd  = PSTR("test");

kann gelesen werden mit:

char buchstabe = PRG_RDB(lcd+counter);

mal sehen welche "Schreibweise" weniger Code erzeugt.

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.