linux 延時函式 msleep() 與mdelay()

gogo_coco_yoyo發表於2014-08-24

http://blog.csdn.net/mayouyang/article/details/4228378


在Linux Driver開發中,經常要用到延遲函式:msleep,mdelay/udelay.

雖然msleep和mdelay都有延遲的作用,但他們是有區別的.

mdelay是忙等待函式,在延遲過程中無法執行其他任務.這個延遲的時間是準確的.是需要等待多少時間就會真正等待多少時間.而msleep是休眠函式,它不涉及忙等待.你如果是msleep(10),那實際上延遲的時間,大部分時候是要多於10ms的,是個不定的時間值.

他們的差異,平時我也講的出來,可是真正用起來的時候,就忘記了.曾在兩個driver的i2c的code中,需要用到delay函式,而我用了msleep函式,一直I2C速度超慢.而我又不知道哪裡出了問題,我潛意識中,認為我只delay了1ms,可是,實際上是十幾毫秒.



cpu切換需要時間的

用mdelay能保證時間比較準確,但用msleep延遲大了4倍。可是用mdelay又耗cpu。

相關文章