Is delay(x)
эквивалент usleep(x*1000)
?Функция Arduino - delay() против c - usleep()
Если это так, то почему существует различие, так как «Обработка» может выполнять «C»?
Is delay(x)
эквивалент usleep(x*1000)
?Функция Arduino - delay() против c - usleep()
Если это так, то почему существует различие, так как «Обработка» может выполнять «C»?
Обработка может выполнять C, но Arduino содержит только подмножество библиотеки C. По-видимому, увольняется is not included.
This link, похоже, предполагает, что реализация задержки и задержкиMicroseconds разработана специально для кристалла Arduino и процессора.
usleep() распространен в Linux и некоторых других, но не для Aruduino. DelayMicroseconds() - это типичный способ для этого. В контексте Linux usleep() предоставляет планировщик, позволяя запускать процессы и потоки, что часто бывает полезно.
Следует иметь в виду, что delayMicroseconds() принимает короткое замыкание без знака, и документация указывает, что он не будет работать как ожидалось для значений, превышающих 16383. Таким образом, любое значение в течение 16 миллисекунд должно использовать delay(). Другая возможность состоит в том, чтобы создать цикл с использованием Micros():
unsigned long startTime;
unsigned long delayTime = 21500; // 21.5 mSec
startTime = micros();
while (micros() - startTime < delayTime) {
// do something useful, or not
}
Это должно работать до тех пор, delayTime менее 70 минут. Расчет micros() - startTime может выглядеть подозрительно - что делать, если этот код вводится непосредственно перед переполнением микросов() и задержка сразу? Даже если micros() возвращает число меньше, чем startTime, арифметическое недополнение все равно приведет к числу, которое является правильной разницей во времени.
Интересная ссылка относительно альтернатив задержки: http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html – Zak