Forum: Mikrocontroller und Digitale Elektronik Frage zu Strings/Strukturen im Flash


von TheMason (Gast)


Lesenswert?

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.

von Werner B. (werner-b)


Lesenswert?

Willkommen im Club!

von TheMason (Gast)


Lesenswert?

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 ...

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.