Hallo werte Leidensgenossen,
Ich bin seit ein paar Stunden auf der Suche nach der Lösung eines
Problems, dass ich anscheinend allein nicht bewältigen kann. Deshalb
wende ich mich an euch. Für ein graphisches Display mit vielen Menues
und Texten suche ich eine Möglichkeit im Flash eines Atmegas eine
Adresstabelle anzulegen, deren Inhalt auf Strings zeigen soll, die
ebenfalls im Flash liegen bleiben sollen.
Wenn eine solche Tabelle im Ram anlegen möchte kenn ich diese
Möglichkeit:
char* foo[] = {"Menue1","Menue2",...};
Hier wird eine Tabelle im Ram ezeugt die auf die Strings im Ram zeigt.
Wenn ich dieses auf den Flash portiere, mit:
char* foo_flash[] PROGMEM = {"Menue1","Menue2",...};
habe ich nach langem probieren herausgefunden, dass eine Tabelle im
Flash erzeugt wird, deren Inhalte aber immernoch nur auf die Adressen
der Strings im Ram verweisen.
Meine Frage: Gibt es eine Möglichkeit dem Compiler bzw Linker zu sagen,
dass die Tabelle sowie die Strings im Flash abgelegt werden sollen??
Vielen Dank,
Benny.
1 | char MenuText1[] PROGMEM = "Menu1"; |
2 | char MenuText2[] PROGMEM = "Menu2"; |
3 | |
4 | char* foo_flash[] PROGMEM = { MenuText1, MenuText2 }; |
Ist das die einzigste sicherste Möglichkeit oder gibt es ggf. noch eine weitere Möglichkeit nach dem o.g. Schema im ersten Beitrag vorzugehen? Mit freundlichen Grüßen. PS: Ich erlaube mir die Frage, weil es bei der Fülle an Texten einen erheblicheren Mehraufwand bedeuten würde und ich über jede Verkürzung sehr froh wäre. Es handelt sich um die 50 Strings...
1 | char* foo_flash[] PROGMEM = { PSTR( "Menu1" ), |
2 | PSTR( "Menu2" ) }; |
müste auch gehen, bin mir aber nicht 100% sicher Kennst du: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
Karl heinz Buchegger schrieb:
>1 | > char* foo_flash[] PROGMEM = { PSTR( "Menu1" ), |
2 | > PSTR( "Menu2" ) }; |
3 | >
|
> > müste auch gehen, bin mir aber nicht 100% sicher Nein, das PSTR-Makro funktioniert nicht in Initialisierungslisten.
Hallo, wenn deine alle ungefähr gleich lan sind könnte folgendes helfen:
1 | char foo_flash[][10] PROGMEM = { |
2 | "Menu1", |
3 | "Menu2", |
4 | };
|
mfg Daniel
Dann hab ich leider noch kein Array mit deren Pointern im Flash :-) Ich werd aber mal Probieren was drauß zu machen... MFG Benny.
Probier doch mal
1 | const char* const foo_flash[] = { /* ... */ }
|
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.