Hallo zusammen, für meine Schüler habe ich gerade mein Arduino Cheat Sheet für den ESP32 / ESP32-S3 überarbeitet. Beim ADC, Timer und LEDC sind die geänderten API-Funkionen vom Board Support V3.x bereits drin. - Wer es nutzen will, viel Spass damit - Wer Fehler findet bitte hier melden - Wer weitere Ergänzungen wünscht - wenn es der Platz zulässt ;-) Aus Platzgründen sind jetzt nicht sämtliche API-Funktionen erklärt. Seltener genutzen Kram kann man in der Espressif-API nachlesen (ist verlinkt). tschuessle Bernhard
Tolle Idee! Habe ich gleich in meinen Fundus aufgenommen :-)
Niklas G. schrieb: > PROGMEM beim ESP32? warum nicht? https://github.com/earlephilhower/ESP8266Audio/issues/643
Alexander schrieb: > warum nicht? Weil's sinnlos ist? Alexander schrieb: > https://github.com/earlephilhower/ESP8266Audio/issues/643 Da wird das PROGMEM-Makro nicht genutzt. Außerdem ist das nicht für den ESP32.
Niklas G. schrieb: > PROGMEM beim ESP32? Ja, kann man sich beim ESP sparen. Danke für den Hinweis. Es passiert aber auch nichts "tragisches", PROGMEM wird vom Compiler ignoriert (aber auch nicht als const umgesetzt!). Hab dazu mal ein mini Testprogramm geschrieben:
1 | #define longstring "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."
|
2 | //char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
|
3 | //const char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
|
4 | //PROGMEM char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
|
5 | //String longstring = "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.";
|
6 | //const char longstring[]= R"xxxxxx(das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.)xxxxxx";
|
7 | |
8 | void setup() { |
9 | // put your setup code here, to run once:
|
10 | Serial.begin(115200); |
11 | Serial.print(longstring); |
12 | }
|
13 | |
14 | void loop() { |
15 | // put your main code here, to run repeatedly:
|
16 | delay(1); |
17 | }
|
Ergebnis: #define, const char und const char mit Rawliteral ist identisch char, PROGMEM char und char mit Rawliteral ist identisch String ist beim RAM geringfügig kleiner, beim ROM größer
1 | #define longstring "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."
|
2 | Sketch uses 279357 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
3 | Global variables use 20200 bytes (6%) of dynamic memory, leaving 307480 bytes for local variables. Maximum is 327680 bytes. |
4 | |
5 | const char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."; |
6 | Sketch uses 279357 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
7 | Global variables use 20200 bytes (6%) of dynamic memory, leaving 307480 bytes for local variables. Maximum is 327680 bytes. |
8 | |
9 | const char longstring[]= R"xxxxxx(das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.)xxxxxx"; |
10 | Sketch uses 279357 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
11 | Global variables use 20200 bytes (6%) of dynamic memory, leaving 307480 bytes for local variables. Maximum is 327680 bytes. |
12 | |
13 | |
14 | char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."; |
15 | Sketch uses 279373 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
16 | Global variables use 20280 bytes (6%) of dynamic memory, leaving 307400 bytes for local variables. Maximum is 327680 bytes. |
17 | |
18 | PROGMEM char longstring[]= "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."; |
19 | Sketch uses 279373 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
20 | Global variables use 20280 bytes (6%) of dynamic memory, leaving 307400 bytes for local variables. Maximum is 327680 bytes. |
21 | |
22 | char longstring[]= R"xxx(das ist ein langer text, der jetzt irgendwo abgespeichert werden wird.)xxx"; |
23 | Sketch uses 279373 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
24 | Global variables use 20280 bytes (6%) of dynamic memory, leaving 307400 bytes for local variables. Maximum is 327680 bytes. |
25 | |
26 | |
27 | String longstring = "das ist ein langer text, der jetzt irgendwo abgespeichert werden wird."; |
28 | Sketch uses 279389 bytes (21%) of program storage space. Maximum is 1310720 bytes. |
29 | Global variables use 20216 bytes (6%) of dynamic memory, leaving 307464 bytes for local variables. Maximum is 327680 bytes. |
RTC_DATA_ATTR könnte noch mit drauf. oder ist das auch sinnlos?
Kleines Update, PROGMEM gelöscht, dafür noch eine Mini-Erklärung für #define ergänzt.
Bernhard S. schrieb: > dafür noch eine Mini-Erklärung für > #define ergänzt. Schreib da besser mal "Makro" drüber statt "Definitionen". Konstanten sollte man sowieso besser per "static constexpr" definieren statt mit #define . "static - Variable bleibt erhalten" stimmt ja auch nur bei lokalen / Member-Variablen
:
Bearbeitet durch User
Alexander schrieb: > RTC_DATA_ATTR könnte noch mit drauf. oder ist das auch sinnlos? Das ist sehr speziell. Wenn man Wake-Up intensiv nutzt, muss man sowieso noch in die vollständige API reinschauen. Das hab ich nicht mal in meinen Beispielen drin (könnte ich vielleicht mal an der Dualen Hochschule nutzen). Danke für den Hinweis. Genauso verzichte ich bei den Schülern bei ISR auf die etwas performantere Version mit IRAM_ATTR... Wer mit ISRs auf Kriegsfuß steht, dem hilft das auch wenig weiter.
"unsigned short 0 – 65536" sollte wohl 65535 heißen ;-) String str5 = "Sensor-Wert: " + analogRead( A0 ); das dürfte nicht funktionieren
:
Bearbeitet durch User
mein Drucker kann es nicht ausdrucken, es kommt nur ein Ausschnitt raus
Niklas G. schrieb: > "unsigned short 0 – 65536" sollte wohl 65535 heißen ;-) Da schaut aber jemand ganz genau hin! Super! > String str5 = "Sensor-Wert: " + analogRead( A0 ); > das dürfte nicht funktionieren Ja, danke! So ist es besser...
1 | String str5 = "Sensor-Wert: " + String(analogRead( A0 )) + "\n"; |
Alexander schrieb: > mein Drucker kann es nicht ausdrucken, es kommt nur ein Ausschnitt raus Im PDF-Reader beim Drucken auf "Skalierung auf Druckbereich" auswählen. Das Original ist DIN-A0 (war so bei der Vorlage, muss das mal bei Gelegenheit wenigstens auf A3 verkleinern). Wenn ich das in LibreOffice als PDF konvertiere bleiben die Links klickbar, aber die Blattgröße ist original. Wenn ich es in eine PDF-Datei drucke, dann ist die 20x so groß (auch wenn es nur A4 Format ist) und die Links sind nicht mehr anklickbar :-( @all: das ist noch ein "Work in progress", 99% sind ok, aber es gibt sicher noch ein paar kleine Korrekturen ;-)
:
Bearbeitet durch User
Manfred P. schrieb: > Bernhard S. schrieb: >> "Work in progress" Was ist das Problem? Bei mir wird der Text vollständig angezeigt. Welcher Browser/PDF-Reader wurde da benutzt? Bei dir fehlt auch die Hintergrundfarbe...
:
Bearbeitet durch User
Bernhard S. schrieb: > Manfred P. schrieb: >> Bernhard S. schrieb: >>> "Work in progress" > Was ist das Problem? Bei mir wird der Text vollständig angezeigt. > Welcher Browser/PDF-Reader wurde da benutzt? Sumatra 3.1.2, Foxit Reader zeigt "Variablen" vollständig. > Bei dir fehlt auch die Hintergrundfarbe... Hintergrund ist weiß, aber im Sumatra fehlen die blauen Rahmen. Im Dateiheader steht "PDF-1.7". Also nichts für ältere Systeme, das muss heutzutage so sein.
Manfred P. schrieb: > Sumatra 3.1.2, Foxit Reader zeigt "Variablen" vollständig. Vielleicht mal Updaten?? >> Latest release: 3.5.2 >> Bei dir fehlt auch die Hintergrundfarbe... > Hintergrund ist weiß, aber im Sumatra fehlen die blauen Rahmen. Die blauen Rahmen sind der Hintergrund. Darüber liegen weiße abgerundete Rechtecke... Irgend was bekommt Sumatra da mit den Layern nicht auf die Reihe. > Im Dateiheader steht "PDF-1.7". Also nichts für ältere Systeme, das muss > heutzutage so sein. Hab dir die Datei nochmal mit Option PDF/A exportiert. Stimmt damit die Darstellung? Ich kann auf Wunsch aber auch die odg-Datei hier reinstellen.
Bernhard S. schrieb: >> Sumatra 3.1.2, Foxit Reader zeigt "Variablen" vollständig. > Vielleicht mal Updaten?? >>> Latest release: 3.5.2 "Latest version that support XP is 3.1.2" > Hab dir die Datei nochmal mit Option PDF/A exportiert. Stimmt damit die > Darstellung? Nein. > Ich kann auf Wunsch aber auch die odg-Datei hier reinstellen. Danke, aber mache Dir keine Mühe, mit Foxit passt es ja und Arduino mit ESP32 läuft unter XP sowieso nicht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.