17-03-2019, 12:32
No widzisz, kiedyś też wrzuciłem kod z delay(1) jako rozwiązanie problemu i zostałem poinformowany, że delay(0) wystarczy. I faktycznie tak było dla ESP8266, chodziło o pętlę while(1); użytą by na spokojnie zobaczyć wyniki obliczeń w monitorze portu. W ESP32 na core1 w ogóle tym nie trzeba się było martwić. Może zmienili funkcję delay. W ogóle oglądałem przykład w szkicach o WDT i trochę mnie rozczarował. Nauczyłem się, że w AVR jest to osobny sprzęt (no też nie zawsze musi zadziałać dobrze, widziałem próby resetowania WDT w przerwaniach), który działa zupełnie niezależnie od programu. W ESP32 po prostu była zrobiona funkcja w timerze, która sobie sprawdzała stan zmiennej i jeśli ta przekroczyła stan licznika to funkcja przerwania wywoływała funkcję do resetu.
Twój problem polega pewnie na tym, że są dwa timery w ESP32 powiązane z WDT: https://community.hiveeyes.org/t/esp32-m...wdt/1554/2, może z komunikatu odczytasz o który chodzi. Zapewne procka resetuje ten, który kontroluje czy taski są przełączane.
Samo yield() też nie wystarcza, może trzeba mieć większego kija do stukania w ESP32?
No ciekawe pytanie o stos WIFI, chciałbym je umieć zrozumieć. Pewnie bez pytania do Igrr'a się nie dowiesz https://github.com/espressif/arduino-esp32/issues . Ja wiem tylko tyle, że część użytych źródeł pochodzi od Espressif jako skompilowane gotowce, zawartość nie jest znana i są poruszane różne teorie spiskowe co Chińczycy przemycają poniżej kosztów produkcji do EU. Natomiast zastanawiam się czy nie chodzi bardziej o to, że w ESP jest użyty FreeRTOS ( o którym prawie nic nie wiem) i jak chcesz lepiej wiedzieć co się dzieje w ESP32 to pewnie z nim się powinieneś poznać, bo WIFI niekoniecznie musi być używane, a skoro go nie ma w kodzie Arduino to może nie ma i jego stosu. Więc te delaye są potrzebne bardziej do tego: "czy tam tego co normalnie robi sobie ESP w między czasie".
Twój problem polega pewnie na tym, że są dwa timery w ESP32 powiązane z WDT: https://community.hiveeyes.org/t/esp32-m...wdt/1554/2, może z komunikatu odczytasz o który chodzi. Zapewne procka resetuje ten, który kontroluje czy taski są przełączane.
Samo yield() też nie wystarcza, może trzeba mieć większego kija do stukania w ESP32?
No ciekawe pytanie o stos WIFI, chciałbym je umieć zrozumieć. Pewnie bez pytania do Igrr'a się nie dowiesz https://github.com/espressif/arduino-esp32/issues . Ja wiem tylko tyle, że część użytych źródeł pochodzi od Espressif jako skompilowane gotowce, zawartość nie jest znana i są poruszane różne teorie spiskowe co Chińczycy przemycają poniżej kosztów produkcji do EU. Natomiast zastanawiam się czy nie chodzi bardziej o to, że w ESP jest użyty FreeRTOS ( o którym prawie nic nie wiem) i jak chcesz lepiej wiedzieć co się dzieje w ESP32 to pewnie z nim się powinieneś poznać, bo WIFI niekoniecznie musi być używane, a skoro go nie ma w kodzie Arduino to może nie ma i jego stosu. Więc te delaye są potrzebne bardziej do tego: "czy tam tego co normalnie robi sobie ESP w między czasie".
Miło być decenianym https://buycoffee.to/kaczakat