Приостанавливает ли delay() подсчет millis()?
Если я добавлю задержку на несколько секунд, будет ли значение, заданное функцией millis(), одинаковым непосредственно до и после задержки?
Или, другими словами, останавливаются ли внутренние часы Arduino во время задержки?
2 ответа
Лучший ответ:
Нет, я не могу это проверить (нет Arduino под рукой), но насколько мне известно, часы всегда продолжают отсчет, поэтому если вы выполните задержку в 1 секунду и выполните diff millis() непосредственно перед этим и после, то это будет (немного больше) 1000 (мс).
Однако следует отметить, что использование задержки не рекомендуется, и лучше проверить millis() для выполнения следующего состояния/команды вместо задержки, которая не позволяет выполнять другие задачи в это время. Но (внутренний) таймер всегда продолжает работать.
Только во время какого-то глубокого спящего режима он может остановиться, но тогда задержка тоже не сработает. И когда прерывания отключены (см. замечание Криса Стрэттона ниже).
Задержка использует миллис. Она просто ждет, проверяя миллис, пока не пройдет определенное время.
Millis управляется прерыванием. Единственное, что останавливает его работу, — это другое прерывание (одновременно может выполняться только одно прерывание), поэтому нельзя использовать задержку в прерывании.
- ATtiny44 millis() не работает с внешней тактовой частотой 16 МГц
- Как справиться с rollover millis()?
- Использование millis() и micros() внутри процедуры прерывания
- Постоянный выход тактовой частоты Arduino
- Arduino 16 МГц только с 3,3 В?
- ардуино - миллисекунды ()
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- Использовать timer0, не влияя на millis() и micros().