Hallo zusammen, im Developer-FAQ (https://nodemcu.readthedocs.io/en/master/lua-developer-faq/) steht, dass ein Task (Callback) nicht länger als 15 ms laufen sollte, da sonst verschiedene SDK-Dienste wie Wifi, Netzwerk und anderes (?) nicht mehr funktionieren könnten. Mir ist aufgefallen, dass ein erster Aufruf von "require()" mit einem leeren Lua-Skript (enthält nur "do" und "end") schon über 200 ms dauert. Damit wäre die 15-ms-Regel verletzt. Ausserdem steht geschrieben, dass ein Watchdog den Controller zurücksetzt, wenn ein Callback länger als 500 ms läuft. Bei einem Test mit einer Endlosschleife startet der ESP8266 nach ca. 1.9 s neu. Baut man ein "require()" in die Schleife ein, läuft die Schleife endlos. Während die Schleife läuft (also der Callback nicht beendet ist), ist der ESP8266 nicht pingbar. "require()" scheint also den Watchdog zurückzusetzen, aber nicht die Kontrolle ans SDK zurückzugeben. Wie geht man damit um? Wie kann man "require()" so verwenden, dass die 15-ms-Regel nicht gebrochen wird? Danke! Hanspeter
Eventuell zählt die Zeit, die require() benötigt, gar nicht zu den besagten 15ms. Während der Abarbeitung des require()-Aufrufs läuft ja streng genommen nicht Dein Programmcode, sondern der des LUA-Interpreters; möglich, dass der sich automatisch um die kritischen Dinge kümmert, die alle paar Millisekunden durchgeführt werden müssen. Als ich mit NodeMCU LUA gearbeitet habe (ist mittlerweile aber schon eine Zeitlang her), habe ich Module bzw. require() jedenfalls exzessiv verwendet, jede noch so kleine Funktion etc. in ein eigenes Modul, dennoch bekam ich in der Praxis kein einziges Mal Probleme aufgrund dieser 15ms. Falls sich das bei Dir tatsächlich als Problem herausstellen sollte, könntest Du evtl. aber auch versuchen, einfach alle benötigten Module gleich zu Beginn der init.lua per require() zu laden. Zu diesem Zeitpunkt dürften die zeitkritischen Sachen wie WiFi noch nicht laufen, weil Du WiFi ja erst einmal aktivieren musst. Wenn die benötigten Module nach dem ersten require()-Aufruf dann erst einmal im Modul-Cache sind, sollten spätere require()-Aufrufe für bereits im Modul-Cache vorhandene Module quasi keine Zeit benötigen.
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.