Обработка переполнения счетчика миллисекунд
- Войдите на сайт для отправки комментариев
Втр, 10/04/2012 - 15:49
Добрый день, уважаемые специалисты!
Возникла у меня достаточно дурацкая проблема.
Я достаточно долго искал, много читал, но, к сожалению так и не понял, как сделать правильно?
У меня в скетче есть следующий код:
started_waiting_at = millis(); timeout = false; while ( ! radio.available() && ! timeout ) if (millis() - started_waiting_at > 500 ) timeout = true;
И он в общем-то прекрасно работает, но терзает меня мысль, что может так случится, что совпадет переполнение значения millis() с соответственным сбросом на 0 и не получения данных тем самым radio.available() в результате чего цикл while будет тупо крутится почти 50 дней.
Я понимаю, что нужно об этом позаботится, но неужели не существует более красивого способа чем предварительная проверка есть ли 500 миллисекунд между started_waiting_at и максимальным значением millis() ?
Вместо
можно попробовать написать
Результат вас, возможно, успокоит.
PS: Впрочем, для unsigned long результат тоже обнадеживающий:
На выходе имеем:
Так что можете спать спокойно - проверка продолжит работу и на границе переполнения