Where is the definition of function millis() located used for ESP32

Hi everybody,

recently somebody asked a question about the rollover of millis() on ESP32-boards.

I tried to find the definition of the function millis() but had no luck so far.

I found something in

unsigned long millis()
  return t.read_ms();

but I'm still unsure if this is the defintion used if I compile for the platform ESP32
So does somebody know where this definition is or a method to really find it?

best regards Stefan


unsigned long IRAM_ATTR millis()
    return (unsigned long) (esp_timer_get_time() / 1000ULL);

Of course, that just begs the question .... why would you ever use millis() on an ESP32? The esp_timer_get_time() function returns a 64-bit integer, has microsecond-resolution, and won't roll over for more than 290,000 years.

1 Like

ah there it is. Thank you gfvavlo

yes very good question. hm well one argument is "oldwards" compatibility to Arduino Uno / Mega
Whenever I would like to re-use some code written for ESP on an Arduino this would require re-editing or do you have a clever solution how to make things like

uint64_t currentMicros = esp_timer_get_time();

compile the same way as

uint32_t currentMillis = millis();


best regards Stefan

Much of ESP32/ESP8266 Arduino cores are wrapper functions. If can get a bit hairy to go looking under the covers because you just find templates, macros, and raw IDF.

Efficiency and understanding comes from IDF programming the Espressif devices:


One can mix the two functions, however:


FTI: The Official STM32duino core does the same wrapper concept around their professional function library ... which does introduce some inefficiency.