Liebe ESP-Fans,
ich baue gerade eine Steuerung, die darauf angewiesen ist, das der ESP
sehr schnell hochfährt, da mit einem Signal die Stromversorgung
angeschaltet wird und dann ein anderes Signal (was ca. 100ms
zeitverzögert kommt) gezählt werden soll. Bei meinen ersten Experimenten
hat der Code fast zwei Sekunden benötigt, um ausgeführt zu werden. Durch
Optimierungen konnte ich das auf ca. 300ms (bei einem ESP8266) drücken.
Ein ESP32 startet naturgemäß schneller. hier lag der Wert deutlich
niedriger.
Jetzt kommt die erstaunliche Entdeckung: Die Startzeit variiert sehr
stark und hängt von Kopiervorgängen von Dateien auf den ESP ab. Das
heißt, wenn ich alle Quellen auf dem ESP lösche und wieder drauf kopiere
erhöht sich die Startzeit. Aber noch kurioser ist, dass ab einer
gewissen Anzahl von Kopiervorgängen die Zeit wieder schlagartig auf
einen kleinen Wert sinkt. Hier die Messwerte für einen ESP32:
MicroPython v1.20.0 on 2023-04-26; ESP32 module with ESP32
1. Durchlauf: Startup duration = 8 ms
2. Durchlauf: Startup duration = 10 ms
3. Durchlauf: Startup duration = 13 ms
4. Durchlauf: Startup duration = 14 ms
5. Durchlauf: Startup duration = 16 ms
6. Durchlauf: Startup duration = 19 ms
7. Durchlauf: Startup duration = 22 ms
8. Durchlauf: Startup duration = 23 ms
9. Durchlauf: Startup duration = 25 ms
10. Durchlauf: Startup duration = 28 ms
11. Durchlauf: Startup duration = 30 ms
12. Durchlauf: Startup duration = 32 ms
13. Durchlauf: Startup duration = 34 ms
14. Durchlauf: Startup duration = 37 ms
15. Durchlauf: Startup duration = 39 ms
16. Durchlauf: Startup duration = 40 ms
17. Durchlauf: Startup duration = 43 ms
18. Durchlauf: Startup duration = 5 ms
Ein Durchlauf besteht immer aus:
1 | rm /pyboard/*
|
2 | cp *.py /pyboard/
|
3 | repl
|
4 | Strg-D (soft reboot)
|
Der Programmcode ist:
1 | from time import ticks_diff, ticks_ms, sleep
|
2 | pstart = ticks_ms()
|
3 | from machine import Pin
|
4 |
|
5 | # read Configuration
|
6 | POWER_PIN = 14
|
7 |
|
8 | power = Pin(POWER_PIN, Pin.OUT)
|
9 | print(f"Startup duration = {ticks_diff(ticks_ms(), pstart)} ms")
|
10 | power.on()
|
11 | sleep(1)
|
12 | power.off()
|
Hat jemand eine Idee, woran das liegen könnte. Gibt es irgend eine
Möglichkeit, den Zustand der kurzen Startup-Zeit direkt zu erreichen?
Liegt es eventuell am Filesystem des ESPs. Gibt es so etwas wie eine
Formatierung oder Defragmentierung?
Ich freue mich über Tipps oder ähnliche Erfahrungsberichte.
Viele Grüße
Haiko