3

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

4

1 回答 1

1

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

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

于 2012-10-10T03:42:32.933 回答