В чем разница между delay() и delaymicroseconds()

Предоставляет ли delaymicroseconds() что-то большее, чем точность времени?

, 👍1


1 ответ


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

0

Между двумя функциями существует более важная разница, чем единица времени, принимаемая в качестве параметров. функция delay() вычисляет время, используя временной интервал Arduino. Однако Delaymicroseconds() не использует прерывание по времени Как вы, возможно, знаете, когда вызывается прерывание, оно останавливает все остальные прерывания. Таким образом, реальная разница в том, что вы не можете использовать delay() в программе, в которой вы используете прерывание, и вместо этого используйте delaymicroseconds(), но имейте в виду, что у него есть диапазон, в котором он точен, и он составляет от 3 до 16383 микросекунд.

,

Это не совсем так. Вы можете использовать задержку в программе с прерыванием, но вы не можете использовать ее в ISR., @Delta_G

«delay () вычисляет время, используя прерывание по времени» - это не очень важно. Как видно из исходного кода (https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c), delay() использует функцию micros(), которая сам требует прерывания таймера для увеличения счетчика. Соответствующее прерывание срабатывает, даже если вы не используете задержки. Пока вам не нужны прерывания от задействованного таймера, нет никаких сложностей с использованием прерываний и delay(). Вы правы насчет delayMicroseconds(): он подсчитывает определенное количество циклов процессора (определяется F_CPU)., @Sim Son