www.mikrocontroller.net

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


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.