ESP8266 Verständnis-Frage Programmierung ticker() und delay()

Begonnen von ext23, 27 Mai 2018, 12:15:27

Vorheriges Thema - Nächstes Thema

ext23

Hallo zusammen,

ich hab eben 3 Stunden an einem Problem gewerkelt und den Fehler nicht gefunden. Jetzt aber doch, nur verstehe ich das Problem nicht ganz.

Ich habe eine Funktion welche eine Messung vornimmt. Diese Funktion wird periodische aufgerufen was ich mit der ticker() Funktion (https://github.com/esp8266/Arduino/tree/master/libraries/Ticker) realisiert habe. In meiner Messfunktion befinden sich mehrere delay(). Alle mit 100ms, aber auch ein delay mit 500ms.

Die Funktion wird nach dem Start des ESP einmal direkt aufgerufen und danach dann nur noch über ticker().

Jetzt habe ich das folgende Phänomen:
Bei dem ersten Aufruf der Funktion ohne ticker() funktionieren die delay() alle wie erwartet. Wird die Funktion jedoch über ticker() aufgerufen werden die delay() scheinbar ignoriert. Ich habe mein delay(500); mal durch:
    start = millis();
    while ((millis()-start) <= 500);
ersetzte und schon funktioniert es auch mit ticker().

Kann mir mal jemand auf die Sprünge helfen was hier genau passiert? Das es jetzt so funktioniert ist die eine Sache, aber ich würde es gerne auch verstehen warum das delay() ignoriert wird.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

habeIchVergessen

#1
hier wird ausgeführt, dass aus ticker-Aufrufen "nur" Flags gesetzt werden sollten, die dann in loop ausgewertet werden. blockierende Aufrufe in ticker sind "böse"!

ext23

Oh aha, das habe ich nirgends gelesen, mhh scheint ja dann wie eine Int Routine zu sein, dann ist das kein Wunder.

Dann werde ich das mal umbauen und über die Hauptschleife regeln. Das mit dem TickerScheduler ist mir zu kompliziert, das geht so einfacher.

Danke für den Tip!

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)