Приостанавливает ли delay() подсчет millis()?

Если я добавлю задержку на несколько секунд, будет ли значение, заданное функцией millis(), одинаковым непосредственно до и после задержки?

Или, другими словами, останавливаются ли внутренние часы Arduino во время задержки?

, 👍0


2 ответа


Лучший ответ:

2

Нет, я не могу это проверить (нет Arduino под рукой), но насколько мне известно, часы всегда продолжают отсчет, поэтому если вы выполните задержку в 1 секунду и выполните diff millis() непосредственно перед этим и после, то это будет (немного больше) 1000 (мс).

Однако следует отметить, что использование задержки не рекомендуется, и лучше проверить millis() для выполнения следующего состояния/команды вместо задержки, которая не позволяет выполнять другие задачи в это время. Но (внутренний) таймер всегда продолжает работать.

Только во время какого-то глубокого спящего режима он может остановиться, но тогда задержка тоже не сработает. И когда прерывания отключены (см. замечание Криса Стрэттона ниже).

,

3

Задержка использует миллис. Она просто ждет, проверяя миллис, пока не пройдет определенное время.

Millis управляется прерыванием. Единственное, что останавливает его работу, — это другое прерывание (одновременно может выполняться только одно прерывание), поэтому нельзя использовать задержку в прерывании.

,