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