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

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

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

, 👍0


2 ответа


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

2

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

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

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

,

Вы упускаете из виду более распространенное исключение: время также перестает увеличиваться при отключении прерываний., @Chris Stratton

@ChrisStratton Спасибо ... Я добавил это в свой ответ. Кроме того, я не знал этого, хотя это кажется очень логичным., @Michel Keijzers


3

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

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

,

(delay на самом деле использует micros, а не millis ([источник](https://github.com/arduino/ArduinoCore-avr/blob/3f63f2975e7183c3254b6794bfcc8f19ca0301c9/cores/arduino/wiring.c#L106:L117)). Но и millis, и micros действительно используют прерывание таймера для подсчета времени.), @Gerben

Задержка, миллисекунды, микросекунды и т. д. — это все одно и то же., @Majenko

Это тоже не совсем верно — отключение прерываний вне ISR также остановит его., @Chris Stratton

Хорошо, господин педант. Мы все знаем, что вы цените свое мнение., @Majenko

Это не вопрос мнения, а вводящего в заблуждение ложного использования слова "только" для чего-то, что на самом деле не является единственной возможностью. Обычно ответ не должен упоминать все, но если он собирается использовать исключительный язык, он это делает, иначе читатели могут быть введены в заблуждение. Если на то пошло, "заимствование" используемого таймера для какой-то другой пользовательской цели также сломало бы его., @Chris Stratton

Вы создаете много бесполезного носа здесь, вы знаете. Пользователям здесь не нужно знать такие уровни детализации большую часть времени. Адаптируйте ответ к аудитории., @Majenko