Вычисление времени

Конструктор
Offline
Зарегистрирован: 02.01.2017

Добрый день.

Помогал знакомому сделать GSM-управление. Блок должен был работать круглосуточно, а в программе для вычисления интервалов времени использовалась функция millis(). Чтобы избежать ошибки в связи с переполнением счётчика написал функцию корректного вычисления разности двух показаний millis().

// Функция определения корректной разности времени
// Разность должна быть меньше 24 суток!
unsigned long MillisDifference(unsigned long StartTime, unsigned long EndTime)
{
  unsigned long CorrectionMillis = 0;     // Поправка

  // Если было переполнение millis() - ввести поправку
  if (StartTime > EndTime) CorrectionMillis = 2147483648;

  // Корректируем время
  EndTime = EndTime + CorrectionMillis;
  StartTime = StartTime - CorrectionMillis;

  CorrectionMillis = EndTime - StartTime; // Вычисляем разность
  return CorrectionMillis;                // Возвращаем разность
}

Надеюсь кому-нибудь пригодится.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Сейчас начнётся :)))