http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Vereinfachung_f.C3.BCr_Zeichenketten_.28Strings.29_im_Flash zeigt wie man einfache Strings nur Flash verbrauchend ablegt und nutzt. char StringImFlash[] PROGMEM = "Erwin Lindemann"; // im "Flash" Ich schaff es jedoch nicht ein String Array abzulegen. const char *aReg16Names[] PROGMEM = { "abc", "def", "ghi"}; ..legt nur die Addressen ab, nicht die Strings o.ä. const char aReg16Names[][] PROGMEM = { "abc", "def", "ghi"}; .. geht nicht const char *aReg16Names[] PROGMEM = { PSTR("abc"), "def", "ghi"}; ..: "error: braced-group within expression allowed only inside a function" Wie könnte es gehen? Robert
> const char aReg16Names[][] PROGMEM = { "abc", "def", "ghi"}; > .. geht nicht Bei einem zweidimensionalen Array muss mindestens die Spaltenzahl angegeben werden.
1 | |
geht...
Johannes M. wrote: >> const char aReg16Names[][] PROGMEM = { "abc", "def", "ghi"}; >> .. geht nicht > Bei einem zweidimensionalen Array muss mindestens die Spaltenzahl > angegeben werden. > >
1 | |
2 | |
> geht...
Es soll kein rechteckiges 2D-Array werden, den die Strings im realen
Case sind sehr unterschiedlich lang und viele.
Gibts noch eine andere Lösung für freie String-Arrays?
Robert
Robert K. wrote: > Es soll kein rechteckiges 2D-Array werden, den die Strings im realen > Case sind sehr unterschiedlich lang und viele. > Gibts noch eine andere Lösung für freie String-Arrays? > Sicherlich.
1 | |
2 | |
3 | |
4 | |
Karl heinz Buchegger wrote: > Robert K. wrote: > >> Es soll kein rechteckiges 2D-Array werden, den die Strings im realen >> Case sind sehr unterschiedlich lang und viele. >> Gibts noch eine andere Lösung für freie String-Arrays? >> > Sicherlich. > >
1 | |
2 | |
3 | |
4 | |
5 | |
Danke. (Da die Tabellen eh von einem Py-Script automatisiert erzeugt werden, kann man mit den Hilfsnamen leben ...) Grüsse Robert
Gast
#2267879
Hallo, ich würde gerne die, wie von Karl Heinz angegebenen, Strings an die LCD Lib Funktion von Peter Fleury lcd_puts_p übergeben. Kann ich dann einfach mit
1 | |
"String2" auf dem Display ausgeben ? Danke und Gruß technikus
technikus schrieb: > Hallo, > > ich würde gerne die, wie von Karl Heinz angegebenen, Strings an die LCD > Lib Funktion von Peter Fleury lcd_puts_p übergeben. > > Kann ich dann einfach mit > >
1 | |
2 | |
> > "String2" auf dem Display ausgeben ? Nein kannst du nicht. Weil Strings selber wieder ein Array ist (ein Array von Pointern) welches im Flash liegt. Und für jede Variable, die im Flash liegt, muss der Zugriff über die entsprechenden pgm_readxxx Funktionen gehen. Allerdings muss das Strings Array ja auch nicht zwingend im Flash liegen.
Gast
#2268050
Hallo, das String Array würde ich gerne im Flash ablegen, da doch schon einige Texte zusammenkommen werfen. Jetzt finde ich die pgm_read_word Funktion. Wenn ich richtig verstehe, muss ich mir die Pointeradresse des gewünschten Strings aus dem Flash holen. Dann an das LCD übergben ?
1 | |
2 | |
Passt das so? Gruß
technikus schrieb: > Passt das so? Da tempString auch auch Adressen im Flash verweist, solltest Du lcd_puts_p verwenden.
Gast
#2268772
Da ich schon 2 Jahre keinen AVR mehr programmiert habe, musste ich erst einmal AVR Studio 5 installieren und mein STK500 rauskramen. Nach ein bißchen Auseinandersetzung mit dem AVR Studio 5 habe ich schon einiges weggetippt. So läuft es:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
DANKE!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.