diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index 04ab9f116..53f154bd0 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -88,7 +88,8 @@ extern "C" void __yield() { extern "C" void yield(void) __attribute__ ((weak, alias("__yield"))); extern "C" void optimistic_yield() { - if (system_get_time() - g_micros_at_last_task_yield > OPTIMISTIC_YIELD_TIME_US) + if (!ETS_INTR_WITHINISR() && + (system_get_time() - g_micros_at_last_task_yield) > OPTIMISTIC_YIELD_TIME_US) { __yield(); } diff --git a/tools/sdk/include/ets_sys.h b/tools/sdk/include/ets_sys.h index a96e2f0be..8d7adbde3 100644 --- a/tools/sdk/include/ets_sys.h +++ b/tools/sdk/include/ets_sys.h @@ -61,6 +61,14 @@ typedef void (*int_handler_t)(void*); #define ETS_INTR_DISABLE(inum) \ ets_isr_mask((1< 0); +} + inline uint32_t ETS_INTR_ENABLED(void) { uint32_t enabled;