diff --git a/ports/esp32/machine_wdt.c b/ports/esp32/machine_wdt.c index 2cb6c5181..bf924c35e 100644 --- a/ports/esp32/machine_wdt.c +++ b/ports/esp32/machine_wdt.c @@ -37,9 +37,12 @@ const mp_obj_type_t machine_wdt_type; typedef struct _machine_wdt_obj_t { mp_obj_base_t base; + esp_task_wdt_user_handle_t twdt_user_handle; } machine_wdt_obj_t; -STATIC machine_wdt_obj_t wdt_default = {{&machine_wdt_type}}; +STATIC machine_wdt_obj_t wdt_default = { + {&machine_wdt_type}, 0 +}; STATIC mp_obj_t machine_wdt_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { enum { ARG_id, ARG_timeout }; @@ -68,14 +71,22 @@ STATIC mp_obj_t machine_wdt_make_new(const mp_obj_type_t *type_in, size_t n_args mp_raise_OSError(rs_code); } - esp_task_wdt_add(NULL); + if (wdt_default.twdt_user_handle == NULL) { + rs_code = esp_task_wdt_add_user("mpy_machine_wdt", &wdt_default.twdt_user_handle); + if (rs_code != ESP_OK) { + mp_raise_OSError(rs_code); + } + } return &wdt_default; } STATIC mp_obj_t machine_wdt_feed(mp_obj_t self_in) { (void)self_in; - esp_task_wdt_reset(); + mp_int_t rs_code = esp_task_wdt_reset_user(wdt_default.twdt_user_handle); + if (rs_code != ESP_OK) { + mp_raise_OSError(rs_code); + } return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_wdt_feed_obj, machine_wdt_feed);