如果我禁用preemption和irq,udelay是否确定?

时间:2012-10-10 03:20:09

标签: linux linux-kernel linux-device-driver

我使用udelay来控制GPIO信号的切换时间。我使用preempt_disable和local_irq_disable禁用了抢占和中断。然而,测试不时显示udelay引起的延迟比我预期的要长。我正在运行双核ARM系统。只要我禁用抢占和中断,我是否可以知道在所有系统条件下udelay时间是否确定且准确?如果没有,有什么建议吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

udelay(和mdelay)通过旋转(繁忙等待)工作,并使用bogomips值来确定旋转计数。考虑到现代处理器不会确定性地执行指令,因为缓存未命中,流水线,分支预测未命中,可变内存延迟等,我会假设即使您禁用硬件中断,udelay也不会是确定性的。

如果您的平台具有某种高性能计时器(如英特尔CPU上的时间戳计数器),您可以使用它来为您工作。