Arduino - delay() 函数与 C语言 usleep() 函数



delay(x)等同于usleep(x*1000)吗?

如果这是真的,那么为什么会有区别,因为"处理"可以执行"C"?

处理可以执行 C,但 Arduino 只包含 C 库的一个子集。显然不包括睡觉。

这种联系似乎表明,延迟和延迟微秒的实现是专门为Arduino晶体和处理器设计的。

usleep()在Linux和其他一些中很常见,但在Aruduino中并不常见。 DelayMicroseconds() 是典型的 arduino 方法。 在 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
}

只要延迟时间少于 70 分钟,这应该有效。 计算micros() - startTime可能看起来很可疑 - 如果此代码是在micros()溢出之前输入的,并且延迟刚好在之后怎么办? 即使 micros() 返回一个小于 startTime 的数字,算术下溢仍然会产生一个适当的时间差数字。

最新更新