Moinsens allerseits,
beim Aufräumen meines Programmcodes sollte auch ein String-Array
(beinhaltet ein haufen an Strings) vom RAM in den Flash verbannt werden,
was allerdings zu einigen Problemen führte.
Im RAM hat dieses Array folgende Gestalt:
1 | static const char * sentence_Array[NSENTENCES][NLANGUAGES] = {
|
2 | {"Willkommen", "Welcome"},
|
3 | {"Satz1","Satz2"}
|
4 | };
|
Um das Array in den Flash zu verschieben wird folgende Darstellung
verwendet:
1 | static const PGM_P sentence_Array[NSENTENCES][NLANGUAGES] PROGMEM = {
|
2 | {"Willkommen", "Welcome"},
|
3 | {"Satz1","Satz2"}
|
4 | };
|
im LSS-File wird jedoch deutlich, dass der Compiler für jedes
Array-Element nur einen Zeiger speichert (wie erwartet), welcher auf
einen "Nichtverwendeten Bereich" im Flashspeicher zielt.
Die Strings an sich werden von Compiler in keiner Weise im Flash
abgelegt.
Eine mögliche aber unkomfortable Lösung wäre jeden String einzelnd zu
Deklarieren und die jeweilige Adresse im Array zu speichern:
1 | const char T1[] PROGMEM = "Willkommen";
|
2 | const char T2[] PROGMEM = "Welcome";
|
3 | const char T3[] PROGMEM = "Satz1";
|
4 | const char T4[] PROGMEM = "Satz2";
|
5 | static const PGM_P sentence_Array[NSENTENCES][NLANGUAGES] PROGMEM = {
|
6 | {T1, T2},
|
7 | {T3, T4}
|
8 | };
|
Gibts da eine bessere Möglichkeit, so dass man nicht erst jeden String
einzelnden Deklarieren muss ???
Bin da für Ratschläge jeder Art offen;)
Gruß Thommy