Struktur im Array im Flash und Pointer ??

Gast #367612
Lesenswert?
• ▲
▼
Sitze jetzt hier schon einige Zeit und versuche einen Pointer auf einen
String von einer Struktur in einem Array im Flash zu bekommen und
kriege es nicht gebacken. Das ganze sieht folgender maßen aus:

[C]
typedef struct stStrings {
    const char *pString1;
    const char *pString1;
} tStrings;

const char String1[] PROGMEM = "Hallo Welt ";
const char String2[] PROGMEM = "Hello World";
const char String3[] PROGMEM = "Hello Foo  ";
const char String4[] PROGMEM = "Hello Bar  ";

const tStrings MyArray[] PROGMEM = {
    { String1, String2 },
    { String3, String4 }
};

int main(void)
{
    // Wenn ich mir den pointer direkt vom String hole gehts es
    // wunderbar
    const char *ptest1 = (const char*)String1;
    uart_putstr_P(ptest1, 11);

    // Pointer holen über Array und struct WILL NICHT GEHEN :-(
    const char *ptest2 = MyArray[0].pString1;
    uart_putstr_P(ptest2, 11);

    while(1);

    return 0;
}
[\C]

Was läuft denn da verkehrt in meinem Kopf?
Gast #367613
Lesenswert?
• ▲
▼
ich bin ein wenig verwirrt gewesen wegen dieser blöden Havard
Architektur und den ganzen Pointer. Hab mein Kopf Problem jetzt
gefunden.

Erklärung: Die Strings oben liegen alle im Flash. Im dem Strukturarray
welches ebenfalls im Flash liegt, liegen nur die Pointer auf die
Strings. Um die Pointer zu lesen muss man natürlich ein pgm_read_word
ausführen.

const char *pTest1;
*pTest1 = (const char*)pgm_read_word(&MyArray[0].String1);

dann klappt es auch.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.