Quanto tempo demora para o contador micros() do ESP32 reiniciar?

Olá pessoal do forum.
Alguem sabe quanto tempo demora para a contagem da função micros() do ESP32 wroom zerar?

Sei que o millis() do arduino demora mais de 40 dias, porem não encontrei referencia ao ESP32.

Obrigado 

Exibições: 47

Responder esta

Respostas a este tópico

Bom dia,

pelo meu entendimento o millis() usa um registrador unsigned long ,

(4 bytes, 32 bits, HEX 0xFFFFFFFF),(DEC 4.294.967.295).

4.294.967.295 mili seg = 4.294.967 seg = 71.582 min = 1.193 H = 49 dias.

Mas como o ESP32 tem arquitetura de 64 bits podemos pensar que mudaria a duraçao,

mas acho que so' usa a arquitetura de 64 bits quando usa o ESP_IDF ou FreeRTOS.

Agora fiquei curioso. Vou pesquisar.

Encontrei isto no forum do arduino:

millis() tem uma limitação máxima de uint32_t e rola após 49 dias.

O ESP32 usa um micro contador, esp_timer_get_time(), que é um unint64_t

e rola após mais de 200 anos.

O uso do contador ESP32 requer uma alteração de código.

Aqui está uma tarefa usando a versão ESP32 de micros, esp_timer_get_time(),

e a versão freeRTOS de millis(), vTaskDelayUntil().

Boa pergunta chara Biazoto, e ótima pesquisa e  resposta SL RV.

Abs.

CK

Eu vi as mensagens anteriores e realmente é muito interessante saber quanto tempo demora para o reset  dos contadores millis() e micros()  do ESP32.

Fazendo uma conta grosseira usando a base do Arduino, e supondo que o numero do contador do micros() seja o mesmo do millis():
(49 dias / 1000 us) *  24 horas = 1,176 horas

 

Achei esse programa no youtube que mostra um relógio do tipo cronometro usando millis() num arduino nano e  modifiquei para testar micros() no ESP32, tambem modifiquei para usar SerialPrint no lugar do display LCD.

Fontes : 

Video - https://www.youtube.com/watch?v=ByvTKcU8Wdc
Código - https://create.arduino.cc/projecthub/shashwatraj98765/how-to-make-s...

#########################################################
Código alterado

#include <Bounce2.h>

const byte startButton = 4;
Bounce startDebouncer1 = Bounce();

const byte resetButton = 23;
Bounce resetDebouncer2 = Bounce();


void setup()
{
Serial.begin(115200);
pinMode(startButton, INPUT_PULLUP);
startDebouncer1.attach(startButton);
startDebouncer1.interval(5);

pinMode(resetButton, INPUT_PULLUP);
resetDebouncer2.attach(resetButton);
resetDebouncer2.interval(5);
Serial.println("Press 1st-Strt/Stp");
Serial.println("Press 2nd-Reset");

}


bool startState = LOW;
bool resetState = LOW;

unsigned long startMicros;
unsigned long currentMicros;
unsigned long elapsedMicros;

void loop() {
// Update the Bounce instances :
startDebouncer1.update();

if ( startDebouncer1.fell() ) { // Call code if button transitions from HIGH to LOW
startState = !startState; // Toggle start button state
startMicros = micros();
}

if (startState)
{
currentMicros = micros();
elapsedMicros = (currentMicros - startMicros);


unsigned long durMS = (elapsedMicros % 1000000 ); //Microseconds
unsigned long durSS = (elapsedMicros / 1000000) % 60; //Seconds
unsigned long durMM = (elapsedMicros / (60000000)) % 60; //Minutes
unsigned long durHH = (elapsedMicros / (3600000000)); //Hours
durHH = durHH % 24;

String durMicrosec = timeMicros(durHH, durMM, durSS, durMS);

Serial.print(durMicrosec);
Serial.print(" |micros: ");
Serial.println(currentMicros);

delay(100);
}

resetDebouncer2.update();

if (resetDebouncer2.fell())
{
resetState = HIGH;
}

if (resetState)
{

Serial.print("Press 1st-Strt/Stp");
Serial.print("Press 2nd-Reset");

delay(100);

resetState = LOW;
}

}

String timeMicros(unsigned long Hourtime, unsigned long Mintime, unsigned long Sectime, unsigned long MStime)
{
String dataTemp = "";

if (Hourtime < 10)
{
dataTemp = dataTemp + "0" + String(Hourtime) + "h:";
}
else {
dataTemp = dataTemp + String(Hourtime) + "h:";
}

if (Mintime < 10)
{
dataTemp = dataTemp + "0" + String(Mintime) + "m:";
}
else {
dataTemp = dataTemp + String(Mintime) + "m:";
}

if (Sectime < 10)
{
dataTemp = dataTemp + "0" + String(Sectime) + "s:";
}
else {
dataTemp = dataTemp + String(Sectime) + "s:";
}

dataTemp = dataTemp + String(MStime);

return dataTemp;
}


 

ESP32 micros()

Resultado do Serial print.
20:10:18.289 -> 01h:10m:00s:318 |micros: 4201329323

A contagem zerou em  01h:12 minutos aproximadamente
20:15:18.266 -> 00h:03m:25s:33016 |micros: 206362021

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço