Go Down

Topic: const char PROGMEM Schreibweise (Read 176 times) previous topic - next topic

freddy64

Hallo,
was ist der Unterschied zwischen

const char R_root[] PROGMEM = "/";

und

static const char* PROGMEM R_root = "/";

nur die Schreibweise, oder hat das auch Auswirkungen auf die spätere Verwendung der Konstante?
Ich habe beide Schreibweisen in diversen ESP32 Lib's gefunden.

combie

#1
Jan 13, 2021, 03:35 pm Last Edit: Jan 13, 2021, 03:52 pm by combie
Hmmm ....
Eigentlich sollte jedes C und C++ Buch da Erleuchtung bringen

Übrigens, ist die  Bedeutung von static vom Kontext abhängig.
Aber den hast du ja erfolgreich weg geschnitten.


Ansonsten ist die Wirkung (meist) gleich, aber der Type der Konstanten unterschiedlich.
Es macht also manchmal einen Unterschied.


Nachtrag:
Quote
static const char* PROGMEM R_root = "/";
Mag mein Kompiler nicht.

Richtiger wäre:
Code: [Select]
static const char* const R_root  PROGMEM = "/";
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

freddy64

Welche von den Definitionen ist C und welche ist C++ ?
Quote
Richtiger wäre:
static const char* const R_root  PROGMEM = "/";
Mein Compiler frisst beides.

Die Verwendung aller server.on(....) mit PROGMEM Konstanten verringert den Speicherbedarf nach dem Upload auf den ESP32 um über 4kB. :)

vorher:
Code: [Select]

server->on("/format", HTTP_GET, [&](AsyncWebServerRequest* request) { handle_format(); request->send(200, F("text/plain"), F("OK)); });


jetzt:
Code: [Select]

server->on(FPSTR(R_format), HTTP_GET, [&](AsyncWebServerRequest* request) { handle_format(); request->send(200, FPSTR(R_text_plain), FPSTR(R_ok)); });


und von den server->on(....) Funktionen habe ich mehr als 20.


combie

Quote
Welche von den Definitionen ist C und welche ist C++ ?
Da beides von Arduino durch den gleichen C++ Compiler genudelt wird, ist es in diesem Fall beides C++.

C geht  etwas anders mit Typen um.

Quote
Mein Compiler frisst beides.
Schätze mal, dass sich das bei der nächsten Compilerumstellung ändern wird.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

freddy64

Quote
Schätze mal, dass sich das bei der nächsten Compilerumstellung ändern wird.
Wie immer....

Erinnert mich irgendwie an den Umstieg von Visual Studio 2003 auf 2008.

Die Umstellung einer riesigen Windows App mit 1MB Quellcode in der Hauptanwendung und 5 zusätzlichen dll's, hat mich fast 4 Wochen Arbeit gekostet.

Bloß gut, dass der VS Compiler um den Faktor 100 schneller ist, als der in der Arduino IDE.


combie

#5
Jan 13, 2021, 07:20 pm Last Edit: Jan 13, 2021, 08:15 pm by combie
Quote
Wie immer....
Halloooo....

static const char* PROGMEM R_root = "/";
ist falsch.
War auch schon vor Jahren falsch, bzw. irre inkonsequent.

static const char* const R_root  PROGMEM = "/";
Ist korrekt.

Also ist der Compiler besser geworden.
Diese Verbesserung hat nichts mit deinen schlechten VS Erfahrungen zu tun.
Oder?



Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

freddy64

Quote
static const char* const R_root  PROGMEM = "/";
habe ich jetzt auch in meinem Sketch so übernommen.

Es ist halt verwirrend, weil jeder GitHub'ler seine "weltbeste" Lib dort veröffentlicht.


Tommy56

#7
Jan 13, 2021, 08:53 pm Last Edit: Jan 14, 2021, 01:36 pm by Tommy56
Das isat der Vor-/Nachteil von OpenSource. Entscheiden was für Dich brauchbar ist, musst Du.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

combie

Quote
Es ist halt verwirrend, weil jeder GitHub'ler seine "weltbeste" Lib dort veröffentlicht.
Tipp:
Menschen sind nicht perfekt.
Du nicht, ich nicht.
Auch die Githubler nicht.

Das Maß der Dinge ist die C++ Standard Spezifikation.
Und selbst die ändert sich über die Jahre in ihren Randgebieten.

Es macht einfach keinen Sinn, die "Schuld" an deiner Misere auf Githubler und VS zu verteilen.
Das fördert nur eine negative Einstellung.
Und das wollen wir doch nicht....

Tue: Schönes dickes modernes C++ Buch unters Kopfkissen legen.
Lerne es auswendig.

Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

freddy64

...Buch unter Kopfkissen
Mein letztes C++ Buch war dieses (siehe Anhang) mit 768 Seiten.
Allerdings habe ich das ganze .NET bis heute strikt verweigert, weil der ganze .NET Mist sinnlos aufgeblasen und dadurch langsam ist.
Dazu kommen noch die unausgereiften Language-Packs.
Buttons sind viel zu klein für globale Übersetzungen: z.B. "Klicken sie hi...". was soll der MS geneigte Anwender damit anfangen.
Wahrscheinlich wurde die Sprache nur erfunden, damit auch der letzte Inder mit Green Card, Programme in einer Mischung aus J-Script und VB im Auftrag von MS schreiben kann.

Von Windows Desktop Anwendungen habe ich mich schon seit 10 Jahren verabschiedet.

Ich bleibe hier der Community treu und lerne, und lerne und lerne, wie man µC's programmiert.





Go Up