mirror of
https://github.com/esphome/esphome.git
synced 2026-07-11 01:15:33 +00:00
Merge remote-tracking branch 'upstream/fast-millis-esp32' into integration
This commit is contained in:
@@ -37,6 +37,12 @@ uint32_t IRAM_ATTR HOT millis() {
|
||||
return micros_to_millis(static_cast<uint64_t>(esp_timer_get_time()));
|
||||
#endif
|
||||
}
|
||||
// millis_64() stays on esp_timer — a different clock from xTaskGetTickCount(). This is
|
||||
// safe because the two are never cross-compared: millis() values are only used for
|
||||
// millis()-vs-millis() deltas (feed_wdt, warn_blocking, component start time), while
|
||||
// millis_64() is used by the Scheduler and uptime sensors. On ESP32 (USE_NATIVE_64BIT_TIME),
|
||||
// Scheduler::millis_64_from_(now) discards the 32-bit now and calls millis_64() directly,
|
||||
// so the Scheduler is internally consistent on the esp_timer clock.
|
||||
uint64_t HOT millis_64() { return micros_to_millis<uint64_t>(static_cast<uint64_t>(esp_timer_get_time())); }
|
||||
void HOT delay(uint32_t ms) { vTaskDelay(ms / portTICK_PERIOD_MS); }
|
||||
uint32_t IRAM_ATTR HOT micros() { return (uint32_t) esp_timer_get_time(); }
|
||||
|
||||
@@ -284,8 +284,12 @@ class Scheduler {
|
||||
bool cancel_retry_(Component *component, NameType name_type, const char *static_name, uint32_t hash_or_id);
|
||||
|
||||
// Extend a 32-bit millis() value to 64-bit. Use when the caller already has a fresh now.
|
||||
// On platforms with native 64-bit time, ignores now and uses millis_64() directly.
|
||||
// On other platforms, extends now to 64-bit using rollover tracking.
|
||||
// On platforms with native 64-bit time (ESP32), ignores now and uses millis_64() directly.
|
||||
// This means the Scheduler uses the esp_timer clock (via millis_64()) for all scheduling,
|
||||
// even though the caller's 32-bit now came from xTaskGetTickCount (via millis()). Safe
|
||||
// because scheduling only compares millis_64 against millis_64 — never against millis().
|
||||
// On other platforms (ESP8266), extends now to 64-bit using rollover tracking, so both
|
||||
// millis() and scheduling use the same clock.
|
||||
uint64_t millis_64_from_(uint32_t now) {
|
||||
#ifdef USE_NATIVE_64BIT_TIME
|
||||
(void) now;
|
||||
|
||||
Reference in New Issue
Block a user