Вступить в клуб →
средняявопросБиты, целые типы и арифметика на МК

Раз в 49 дней устройство сразу рвёт связь по таймауту

Счётчик миллисекунд uint32_t ms_ticks увеличивается в SysTick. Таймаут ответа модема:

uint32_t start = ms_ticks;
while (!modem_reply()) {
    if (ms_ticks > start + 1000) {
        return TIMEOUT;
    }
}

Обычно всё работает, но примерно раз в 49,7 суток попытка связи обрывается мгновенно. Как записать проверку?

  • if ((uint32_t)(ms_ticks - start) >= 1000)
  • if (ms_ticks >= start + 1000U)
  • if ((int32_t)ms_ticks > (int32_t)start + 1000)
  • if (ms_ticks / 1000 > start / 1000)

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела