Преобразование переменной uint_32 в uint_64

Спойлер

Пока не понял, почему так. Возможно это связано с работой 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);                                   //
}                                              //