Arduino F(): was heißt es eigentlich tun
Habe ich gefragt, eine ähnliche Frage vor, aber ich merke, dass ich kann nicht Köpfe oder Schwänze der macrology und templateness. Ich bin ein C (statt C++) - Programmierer.
Was bedeutet F() eigentlich? Wann gibt es Sachen Charaktere in pgmem? Wann gibt es pull-Zeichen aus pgmem? Es tut cache Sie? Wie sieht es handle low-memory-Situationen?
- In der vorherigen Frage, ich Frage, wo die Umsetzung. Nach dem Lesen der Quelle, ich weiß, ich verstehe es nicht. Die ursprüngliche Frage hat Ihre volle Antwort, damit ich es akzeptieren.
- Es ist auch eine Antwort in der Arduino-SE.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Vorlagen beteiligt, nur das überladen von Funktionen. Die
F()
makro macht zwei Dinge:verwendet
PSTR
um sicherzustellen, dass das Zeichenfolgenliteral in den Flash-Speicher (code-Raum, anstatt die Daten Raum). AllerdingsPSTR("some string")
können nicht gedruckt werden, weil es sonst mit einer einfachenchar *
stellt eine Basis-Adresse die Zeichenfolge gespeichert in Flash. Die Dereferenzierung, die Zeiger würde auf einige zufällig gewählte Zeichen von der gleichen Adresse in Daten. Das ist der Grund, warumF()
auch...CASTET das Ergebnis der
PSTR()
zu__FlashStringHelper*
. Funktionen wieprint
undprintln
überlastet sind, so dass bei Empfang eines__FlashStringHelper*
argument, Sie richtig zu dereferenzieren, die Zeichen in den Flash-Speicher.BTW. Für th ESP32-Bibliothek, die beide diese Funktionen sind definiert in den folgenden Dateien:
und F(x):
Auch für ESP32,
PSTR(x)
wird nicht benötigt und ist nur x:#define PSTR(s) (s)
.