Frage zu Strings/Strukturen im Flash

Gast #1096742
laut den avrgcc/libc beispielen lassen sich arrays von strings bzw. 
strukturen mit strings die ausschließlich im flash liegen nur so 
realisieren :


char foo [] PROGMEM = "foo";
char bar [] PROGMEM = "bar";

char *str [] PROGMEM = { foo, bar, };

zumindest hab ich das so rausgelesen ...

was ich suche ist eine möglichkeit den string in einer struktur DIREKT 
im flash abzulegen (ist vllt was umständlich beschrieben)

so z.b.

char *str [] PROGMEM = { "foo", "bar", };

sodass "foo" und "bar" automatisch im flash liegen und die zeiger direkt 
auf den flash-bereich zeigen.

laut den beispielen geht sowas für fkt mit PSTR. aber dieser mechanismus 
versagt natürlich bei dem o.g. beispiel.
ich brauche das, da ich (mal wieder) exzessiv mit dem präprozessor 
hantiere, der code der ausgespuckt wird aber dafür sorgt das der text im 
ram steht. dadurch kann ein späteres strcmp_P auch nicht funktionieren.
gibt es ein Makro mit dem ein string automatisch im flash landet und 
(auf eine datenstruktur angewendet) mir den zeiger auf diesen flash 
bereich liefert.

also wenn ich z.b.

typedef struct {
  char *pcSource;
  char *pcDest;
} T_TEST_STRUCT;

T_TEST_STRUCT astStructs [] PROGMEM =
{
 { "source1", "dest1", },
 { "source2", "dest2", },
};

habe das "source1", "dest1", "source2", "dest2" automatisch im flash 
liegen und die zeiger der astStructs auf diese zeichenketten im flash 
zeigen ?
das problem ist ganz einfach das ich (da ich den präprozessor verwende) 
nicht für jeden einzelnen string ein char xyz [] PROGMEM = "blablabla"; 
anlegen möchte und dann einen &xyz für jeden dieser strings machen 
möchte/kann ...

aus der avrgcc/libc bzw. dem avrgcc-tutorial bin ich in diesem punkt 
leider nicht schlau geworden.
Gast #1096759
gibts da echt keine möglichkeit ?

würde mir einiges zunichte machen, da ich mit dem präprozessor zwar 
automatisch strings generieren kann die im flash liegen, aber die 
zuordnung wäre dann dahin ... bzw. würde die sache ziemlich kompliziert 
machen ...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.