mirror of
https://github.com/esphome/esphome.git
synced 2026-07-10 17:05:36 +00:00
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:
@@ -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
@@ -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().
|
||||
|
||||
Reference in New Issue
Block a user