2013-11-18 3 views
0

Is delay(x) эквивалент usleep(x*1000)?Функция Arduino - delay() против c - usleep()

Если это так, то почему существует различие, так как «Обработка» может выполнять «C»?

+0

Интересная ссылка относительно альтернатив задержки: http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html – Zak

ответ

0

Обработка может выполнять C, но Arduino содержит только подмножество библиотеки C. По-видимому, увольняется is not included.

This link, похоже, предполагает, что реализация задержки и задержкиMicroseconds разработана специально для кристалла Arduino и процессора.

0

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, арифметическое недополнение все равно приведет к числу, которое является правильной разницей во времени.

Смежные вопросы