Forum: Compiler & IDEs Struktur im Array im Flash und Pointer ??


von Marcel (Gast)


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?

von Marcel (Gast)


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.

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
Noch kein Account? Hier anmelden.