Merge branch 'inline-micros-esp32' into integration

Re-merge the updated PR (now keeps esp8266 millis/delay out-of-line so
integration's accumulator + custom delay overlay cleanly, while still
inlining yield/micros/millis_64 on esp8266).
This commit is contained in:
J. Nick Koston
2026-04-24 12:06:08 -05:00
2 changed files with 2 additions and 7 deletions
+1 -2
View File
@@ -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
+1 -5
View File
@@ -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<uint32_t>(::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().