Плата ESP32. Переменная uint32_t c1 показывает сколько тактов процессора прошло с момента включения. При частоте процессора 240 мГц данная переменная переполняется раз в 17 секунд. Как получить новую переменную uint64_t , которая бы отображала количество тактов процессора без переполнения?
Самое сложное узнать что переменная С1 переполнилась. Например ее значение в предыдущий момент времени было 4 000 000 000 , а теперь значение переменной 25 000 000. Ясно дело, что переменная переполнилась. Вопрос только сколько раз. Может быть один, а может быть два.
Это не может быть сложным.
Никак!
Просто есть условия, при которых это сделать очень просто, и есть условия, при которых это сделать невозможно.
Очевидно, наличие альтернативного счетчика с меньшей частотой изменения (например, millis) относится к первому случаю, хотя этот вариант тоже не гарантирован от переполнения (той же самое millis).
Это зависит от того, что имеется и что хочется получить.
Озвучте условия и попытаемся подобрать оптимальный вариант.
Но микросекунды ни в каком варианте оптимальными не будут.
Надо получить переменную С2. Примерно набросал условия.Вроде работает и даже правильно считает. Но только одно условие, чтобы с1 вызывалось хотябы несколько раз в 17 секунд.
Первое надо отбросить, т.к вычитать пока нечего.
А почему второе немного больше “натикивает” - не могу понять, уже засыпаю… Будет время, может завтра разберусь.
Но в любом случае к подсчёту это не относится, подсчёт верный.
Тут код упрощенный. Такты я считаю для конкретного ядра. А почему считаю такты - поскольку они работают с максимальной частотой, а другие таймеры вроде с частотой не больше 40 мГц. Ну и второе для работы с обычными таймерами у меня не ставится ни одна библиотека. На настройку таймера выдает ошибки. Пытаюсь читать значение тактов таймера командой esp_err_t timer_get_counter_value(). Поэтому такты процессора единственный таймер, который получилось запустить.