diff options
Diffstat (limited to 'ports/esp8266/ets_alt_task.c')
| -rw-r--r-- | ports/esp8266/ets_alt_task.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/ports/esp8266/ets_alt_task.c b/ports/esp8266/ets_alt_task.c index b724b8f14..0b1615d65 100644 --- a/ports/esp8266/ets_alt_task.c +++ b/ports/esp8266/ets_alt_task.c @@ -112,22 +112,27 @@ int ets_loop_iter_disable = 0; int ets_loop_dont_feed_sw_wdt = 0; // to implement a 64-bit wide microsecond counter -static uint32_t system_time_prev = 0; +uint32_t system_time_low_word = 0; uint32_t system_time_high_word = 0; -bool ets_loop_iter(void) { - if (ets_loop_iter_disable) { - return false; - } - - // handle overflow of system microsecond counter +void system_time_update(void) { + // Handle overflow of system microsecond counter ets_intr_lock(); uint32_t system_time_cur = system_get_time(); - if (system_time_cur < system_time_prev) { + if (system_time_cur < system_time_low_word) { system_time_high_word += 1; // record overflow of low 32-bits } - system_time_prev = system_time_cur; + system_time_low_word = system_time_cur; ets_intr_unlock(); +} + +bool ets_loop_iter(void) { + if (ets_loop_iter_disable) { + return false; + } + + // Update 64-bit microsecond counter + system_time_update(); // 6 words before pend_flag_noise_check is a variable that is used by // the software WDT. A 1.6 second period timer will increment this |
