ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1429500 Топик полностью
SciFi (24.04.2024 16:34, просмотров: 97) ответил ar-elec на Есть аппаратный таймер, считающий в пределах uint32. Хочется, чтобы считал до uint64. Я использую функцию, которая видит, насколько изменилось значение таймера между вызовами и добавляет эту разницу в переменную uint64
Как-то так, наверное: 

Функцию UpdateTimer64() вызывать только из фоновой задачи, например. Не реже, чем период 32-разрядного таймера.

UPD: хотя нет, прерывания там тоже будут чудить. Надо что-то ещё навертеть.


static uint64_t timer64;
static uint32_t cnt_old;

uint64_t GetTimer64(void) { return timer64 + (GetTimer() - cnt_old); }
void UpdateTimer64(void) { uint32_t now = GetTimer(); timer64 += now - cnt_old; cnt_old = now; }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้