mirror of
https://github.com/esphome/esphome.git
synced 2026-09-15 09:08:41 +00:00
[esp8266] Handle delay(0) as a yield point
Arduino's delay(0) calls yield() once — used as a yield point by some code. Our millis-based loop would skip yielding entirely since 0 < 0 is false. Add explicit delay(0) → yield() handling.
This commit is contained in:
@@ -60,9 +60,13 @@ uint64_t millis_64() { return Millis64Impl::compute(millis()); }
|
||||
// original millis body (~80 bytes IRAM). This yield loop achieves the same
|
||||
// behavior: feeds the watchdog, processes SDK tasks, keeps WiFi alive.
|
||||
void HOT delay(uint32_t ms) {
|
||||
if (ms == 0) {
|
||||
optimistic_yield(1000);
|
||||
return;
|
||||
}
|
||||
uint32_t start = millis();
|
||||
while (millis() - start < ms) {
|
||||
yield();
|
||||
optimistic_yield(1000);
|
||||
}
|
||||
}
|
||||
uint32_t IRAM_ATTR HOT micros() { return ::micros(); }
|
||||
|
||||
Reference in New Issue
Block a user