AVR String-Array

Gast #2590073
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
Gast
Hi,
schon mal mit "PSTR()" im Array versucht?

Hab gerade keine Möglichkeit dies zu testen, aber da es beim printf auch 
so geht sollte es möglich sein.

Stephan
Gast
@Uwe S.
sowas in der Art ging mir auch schon durch den Kopf, allerdings ist das 
ganze direkt in einer Tabelle übersichtlicher und schnell erweiterbar.

@Stephan
dies funktioniert leider nicht, da
1
# define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];}))
aus 2 Codezeilen besteht, welche natürlich nicht im Array verwendet 
werden können.

Wahrscheinlich wirds drauf hinaußlaufen, dass ich die Strings in einer 
Excell-Datei verwalte und zum Erzeugen des Codes für die Strings ein 
kleines Skript verwende.

Aber Weiter Ideen oder Anregungen sind herzlich willkommen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.