Arduino - delay()函数与c - usleep()函数

时间:2013-11-18 00:21:29

标签: arduino

delay(x)相当于usleep(x*1000)

如果这是真的,那么为什么会有区别,因为“Processing”可以执行“C”?

2 个答案:

答案 0 :(得分:0)

处理可以执行C,但Arduino只包含C库的子集。显然是睡着了is not included

This link似乎暗示延迟和延迟微秒的实现是专门为Arduino晶体和处理器设计的。

答案 1 :(得分:0)

usleep()在Linux和其他一些版本中很常见,但不适用于Aruduino。 DelayMicroseconds()是执行此操作的典型arduino方法。在Linux上下文中,usleep()产生调度程序,允许其他进程和线程运行,这通常很有帮助。

请注意,delayMicroseconds()接受unsigned short,文档表明它对于大于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()溢出之前输入此代码并且延迟刚好在之后输入怎么办?即使micros()返回一个小于startTime的数字,算术下溢仍然会产生一个正确的时间差数。