diff --git a/include/globals.h b/include/globals.h index fb2e773e..b012dae9 100644 --- a/include/globals.h +++ b/include/globals.h @@ -8,6 +8,9 @@ #include #include +// task watchdog functions +#include + // std::set for unified array functions #include #include diff --git a/src/gpsread.cpp b/src/gpsread.cpp index 86da8fef..ad4d811e 100644 --- a/src/gpsread.cpp +++ b/src/gpsread.cpp @@ -138,10 +138,12 @@ time_t get_gpstime(uint16_t *msec) { void gps_loop(void *pvParameters) { _ASSERT((uint32_t)pvParameters == 1); // FreeRTOS check + esp_task_wdt_add(NULL); while (1) { - + esp_task_wdt_reset(); // feed task watchdog while (cfg.payloadmask & GPS_DATA) { + esp_task_wdt_reset(); // feed task watchdog #ifdef GPS_SERIAL // feed GPS decoder with serial NMEA data from GPS device while (GPS_Serial.available()) diff --git a/src/led.cpp b/src/led.cpp index 8095a3a9..083dbcc8 100644 --- a/src/led.cpp +++ b/src/led.cpp @@ -141,7 +141,9 @@ void blink_LED(uint16_t set_color, uint16_t set_blinkduration) { #if (HAS_LED != NOT_A_PIN) || defined(HAS_RGB_LED) void ledLoop(void *parameter) { + esp_task_wdt_add(NULL); while (1) { + esp_task_wdt_reset(); // feed task watchdog // Custom blink running always have priority other LoRaWAN led // management if (LEDBlinkStarted && LEDBlinkDuration) { diff --git a/src/lorawan.cpp b/src/lorawan.cpp index 3414bb9e..178ff7d7 100644 --- a/src/lorawan.cpp +++ b/src/lorawan.cpp @@ -343,9 +343,11 @@ uint32_t lora_queuewaiting(void) { // LMIC loop task void lmictask(void *pvParameters) { _ASSERT((uint32_t)pvParameters == 1); + esp_task_wdt_add(NULL); while (1) { - os_runloop_once(); // execute lmic scheduled jobs and events - delay(2); // yield to CPU + esp_task_wdt_reset(); // feed task watchdog + os_runloop_once(); // execute lmic scheduled jobs and events + delay(2); // yield to CPU } } diff --git a/src/main.cpp b/src/main.cpp index c3c5af5c..4d573df7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -104,6 +104,10 @@ void setup() { (*((uint32_t volatile *)ETS_UNCACHED_ADDR((DR_REG_RTCCNTL_BASE + 0xd4)))) = 0; #endif + // task watchdog configuration + //esp_task_wdt_init(1, true); + esp_task_wdt_deinit(); + // setup debug output or silence device #if (VERBOSE) Serial.begin(115200);