Forum: Compiler & IDEs progmem attribut


von Gernot F. (gernotfrisch)


Lesenswert?

const char aa[] PROGMEM = "xyz";

gibt warnung:
../Frogga.c:107: warning: `__progmem__' attribute ignored

Warum?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kontext?

Ich könnte mir vorstellen, dass du das mit einer Variable der
storage class "auto" versucht hast, das kann nicht funktionieren.

von Gernot F. (gernotfrisch)


Lesenswert?

Kontext??

void foo(void)
{
 const char aa[] PROGMEM = "xyz";
}

Das ist eine ganz normale Funktion. "Auto" habe ich explizit nichts
gemacht.

von Rolf Magnus (Gast)


Lesenswert?

Lokale Variablen sind natürlich per Default auto.

von Die meisten Elche (Gast)


Lesenswert?

Das ist aber eine Variable der storage class "auto" - die wird auf dem
Stack angelegt. Das passiert mit jeder nichtstatischen Variablen, die
innerhalb eines Blockes angelegt wird.
Und damit geht PROGMEM nicht. Wie auch, der Stack liegt ja nicht im
Flash ...

von Gernot F. (gernotfrisch)


Lesenswert?

Ah. Also
static const char array[] PROGMEM = "KungFu";

von Simon K. (simon) Benutzerseite


Lesenswert?

Rein theoretisch müsste es doch funktionieren, die Variable außerhalb
einer Funktion anzulegen. Natürlich gilt sie dann über das gesamte
Programm.

PS: Statische Variablen behalten doch ihren Wert.. Selbst wenn die
Funktion, in der sie angelegt werden, endet.

von Die meisten Elche (Gast)


Lesenswert?

Nicht nur theoretisch. Nichtautomatische Variablen (statische innerhalb
eines Blockes) oder globale innerhalb eines Modules (statische
außerhalb jedes Blockes) oder globale auch über mehrere Module (als
Linkersymbol sichtbar) funktionieren alle gleichermaßen mit progmem.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich danke für die Bestätigung!

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.