Es scheint, dass wenn ein E/A-Pin-Interrupt auftritt, während Netzwerk-E/A durchgeführt wird, das System zurückgesetzt wird - auch wenn die Interrupt-Funktion nur eine lokale Variable deklariert und zuweist (im Wesentlichen eine Do-nothing-Routine) Ich bin ziemlich sicher, dass es nicht damit zu tun hat, zu viel Zeit in der Interrupt-Funktion zu verbringen. (Meine tatsächlichen Arbeitsunterbrechungsfunktionen sind ziemlich spartanisch, streng inkrementieren und zuweisen, nicht einmal irgendeine bedingte Logik.)Interrupt während Netzwerk I/O == Crash?
Ist das eine bekannte Einschränkung? Meine Problemumgehung besteht darin, den Interrupt während der Verwendung des Netzwerks zu trennen, aber dies führt natürlich zu einem möglichen Datenverlust.
function fnCbUp(level)
lastTrig = rtctime.get()
gpio.trig(pin, "down", fnCbDown)
end
function fnCbDown(level)
local spin = rtcmem.read32(20)
spin = spin + 1
rtcmem.write32(20, spin)
lastTrig = rtctime.get()
gpio.trig(pin, "up", fnCbUp)
end
gpio.trig(pin, "down", fnCbDown)
gpio.mode(pin, gpio.INT, gpio.FLOAT)
Zweig: master
bauen auf gebaut: 2016-03-15 10:39
angetrieben durch Lua 5.1.4 auf SDK 1.4.0
Module: adc , Bit, Datei, GPIO, i2C, Netz, Knoten, pwm, rtcfifo, rtcmem, rtctime, sntp, tmr, uart, Wi-Fi
Auch hier zeigen uns Code und Firmware-Branche/Revision. Dies ist im Allgemeinen keine bekannte Einschränkung, aber wir entdecken und beheben Fehler im ursprünglichen Netzmodul (bis zum Umschreiben). –
Aktualisiert Q, um Build- und Quellcode zu enthalten. –