Пока не понял, почему так. Возможно это связано с работой RTOS или delay (#19)
У меня по крайней мере программа из 11 поста работает с точностью до 1. Проверял в течении минуты. И delay там тоже есть. Но я не проверял время в течении первых 2 секунд.
Легко проверить. Первые значения 360253231 - 120230901 = 240022330. А дальше везде будет 240000000. Так же, как и у меня.
Еще можно считать как-то этак:
(cnt32 > uint32_max / 2) => ready_to_overflow = true;
((cnt32 < uint32_max / 2) && ready_to_overflow == true) => ready_to_overflow == false, cnt_overflows++;
cnt64 = cnt_overflows * uint32_max + cnt32;
Пока остановился на этом варианте. Думаю вопрос решен.
void setup() //
{ Serial.begin(115200); } //
uint32_t c1_new; //
uint32_t c1_old; //
uint64_t c2; //
void loop() //
{ //
c1_new = esp_cpu_get_cycle_count(); //
c2 = c2+c1_new-c1_old; //
if (c1_new<c1_old) c2=c2+4294967296; //
c1_old=c1_new; //
Serial.print(" F = ");Serial.print (c2); //
Serial.print(" FRQ = ");Serial.println(c1_new);//
delay(1000); //
} //