diff --git a/esphome/components/esp8266/core.cpp b/esphome/components/esp8266/core.cpp index dee810aaee..ed28027445 100644 --- a/esphome/components/esp8266/core.cpp +++ b/esphome/components/esp8266/core.cpp @@ -15,7 +15,7 @@ extern "C" { namespace esphome { -// yield() and micros() inlined in hal.h. +// yield(), micros(), millis_64() inlined in hal.h. // Fast accumulator replacement for Arduino's millis() (~3.3 μs via 4× 64-bit // multiplies on the LX106). Tracks a running ms counter from 32-bit // system_get_time() deltas using pure 32-bit ops. Installed as __wrap_millis @@ -66,7 +66,6 @@ uint32_t IRAM_ATTR HOT millis() { xt_wsr_ps(ps); return result; } -uint64_t millis_64() { return Millis64Impl::compute(millis()); } // Poll-based delay that avoids ::delay() — Arduino's __delay has an intra-object // call to the original millis() that --wrap can't intercept, so calling ::delay() // would keep the slow Arduino millis body alive in IRAM. optimistic_yield still diff --git a/esphome/core/hal.h b/esphome/core/hal.h index 362f36395c..db370f3568 100644 --- a/esphome/core/hal.h +++ b/esphome/core/hal.h @@ -144,13 +144,9 @@ __attribute__((always_inline)) inline uint64_t millis_64() { __attribute__((always_inline)) inline void yield() { ::yield(); } __attribute__((always_inline)) inline uint32_t micros() { return static_cast(::micros()); } #if defined(USE_ESP8266) -// delay(), millis(), millis_64() stay out-of-line on this branch (integration): -// esphome::millis() is the body of __wrap_millis (-Wl,--wrap=millis), so it must -// remain a real symbol to avoid infinite recursion. delay() has a custom -// optimistic_yield-based body that intentionally avoids Arduino's __delay path. void delay(uint32_t ms); uint32_t millis(); -uint64_t millis_64(); +__attribute__((always_inline)) inline uint64_t millis_64() { return Millis64Impl::compute(millis()); } #elif defined(USE_LIBRETINY) __attribute__((always_inline)) inline void delay(uint32_t ms) { ::delay(ms); } // Per-variant millis() fast path — matches MillisInternal::get().