ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 сентября
1542411
IBAH (16.09.2025 15:52, просмотров: 1266)
Захотелось 32 разрядный таймер с тактовой процессора (кортекс м3). Соответственно, младшее слово на аппаратном таймере, старшие по прерыванию инкрементируются. Как читать потокобезопасно? Классический способ, читать пока не будут прочитаны повторяющие значения не хиляет. Ничего умнее этого в голову не приходит, но как-то не вставляет... 
//
unsigned long GetWaitTimer(void)
  {
  unsigned long TimH0=TimHigt;
  unsigned long TimL=TIM2->CNT;
  unsigned long TimH1=TimHigt;
  if(TimH0==TimH1) {return TimH0|TimL; }
  return TimH1|(TIM2->CNT);
  }

void TIM2_IRQHandler(void)
  {
  LL_TIM_ClearFlag_UPDATE(TIM2);
  TimHigt+=0x00010000;
  return;
  }

//