Watchdog trigger when starting wlan in WLAN.STA mode
-
Hi all
If I run the function below in
/flash/main.py
it reliably triggers the watchdog, and the same if I call the function after a successful boot.
However, if I execute the lines in this function via the repl one by one, I don't trigger the watchdog. Is this a timing issue ?def setup_wlan_client(): wlan=WLAN(mode=WLAN.STA) net = [net for net in wlan.scan() if net.ssid == 'bart'][0] wlan.connect(net.ssid, auth=(net.sec, '*****'), timeout=5000) while not wlan.isconnected(): pass print(wlan.ifconfig())
Here's my os info:
os.uname() (sysname='LoPy', nodename='LoPy', release='0.9.3.b2', version='d78a5a3 on 2016-11-05', machine='LoPy with ESP32')
Here's the watchdog log after successful hard reset.
... mode : softAP(24:0a:c4:00:85:0d) dhcp server start:(ip: 192.168.4.1, mask: 255.255.255.0, gw: 192.168.4.1) dhcp server start:(ip: 192.168.4.1, mask: 255.255.255.0, gw: 192.168.4.1) MicroPython d78a5a3 on 2016-11-05; LoPy with ESP32 Type "help()" for more information. >>> setup_wlan_client() mode : sta(24:0a:c4:00:85:0c) n:4 0, o:6 0, ap:255 255, sta:4 0, prof:6 state: 0 -> 2 (b0) state: 2 -> 3 (0) state: 3 -> 5 (10) add 0 connected with bart, channel 4 Task watchdog got triggered. The following tasks did not feed the watchdog in time: Tasks currently running: CPU 0: MicroPy Aborting. Guru Meditation Error: Core 0 panic'ed (Unhandled debug exception) Register dump: PC : 400e6d17 PS : 00060036 A0 : 800f2088 A1 : 3ffd51f0 A2 : 0000000a A3 : 0000000a A4 : 00000004 A5 : 00000000 A6 : 00000000 A7 : fffffff8 A8 : 00000000 A9 : 3ffd5160 A10 : 00000000 A11 : 3ffdd7b3 A12 : 3ffd512f A13 : 00000030 A14 : 00000000 A15 : 00000000 SAR : 00000011 EXCCAUSE: 00000001 EXCVADDR: 00000000 LBEG : 4000c2e0 LEND : 4000c2f6 LCOUNT : ffffffff CPU halted.
-
@bmarkus
your suggestion is correct, and resolves the issue!So the good solution is:
while not wlan.isconnected(): tim.sleep_ms(50)
But
pass
ormachine.idle()
in the while loop trigger watchdog expiry!
-
This post is deleted!
-
I would replace the pass inside of the while loop with a small delay, like 100ms or so for testing.