Pl Lp schrieb:
> Bei folgender Version wird nämlich nicht der Flash-Speicher verwendet:
>
>
1 | > char* Text_Test1 PROGMEM = "Teststring test test";
|
2 | >
|
>
> Das geht alles ins SRAM
Alles nicht. Das was du als PROGMEM markiert hast, geht ins Flash. Und
das ist: Ta ta, der Pointer der auf den String zeigt.
Du hast hier 2 Teile:
Einen Pointer und den String selber
Text_Test1
+----+
| o---------------------> "Teststring test test"
+----+
Text_Test1 liegt im Flash, "Teststring test test" liegt im SRAM
Das hier
1 | const char MenuItem1[] PROGMEM = "Menu Item 1";
|
ist anders. Das hier generiert
MenuItem1
+---+---+---+---+---+---+---+--
| M | e | n | u | | I | t | ....
+---+---+---+---+---+---+---+--
also ein Array. Und dieses Array liegt im Flash.
> Nach intensiver Recherche glaube ich,
> dass man nicht auf einzelne Strings zugreifen kann.
Auf einen String kann man sowieso nicht zugreifen. Wohl aber auf die
Character eines Strings.
1 | USART_TxString_P((char*)pgm_read_word(&MenuItemPointers[EnteredNum]));
|
und wie sieht dein USART_TxString_P aus?
(Ich hege den Verdacht, dass da mittels Makro noch ein implizites PSTR
drinnen steckt)