我使用udelay 来控制GPIO 信号的切换时间。我使用 preempt_disable 和 local_irq_disable 禁用了抢占和中断。但是测试时不时显示udelay造成的延迟比我预想的要长。我在双核 ARM 系统上运行。只要我禁用抢占和中断,我可以知道在所有系统条件下 udelay 时间是否确定且准确吗?如果没有,有什么建议吗?非常感谢。
最佳答案
udelay(和 mdelay)通过自旋(忙等待)工作,并使用 bogomips 值来确定自旋计数。考虑到现代处理器不会确定性地执行指令,因为缓存未命中、管道、分支预测未命中、可变内存延迟等,我假设 udelay 不会是确定性的,即使您禁用硬件中断也是如此。
如果您的平台有某种高性能计时器(例如英特尔 CPU 上的时间戳计数器),您也许可以让它为您工作。
关于linux - 如果我禁用抢占和 irq,udelay 是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811490/