linux 中mdelay() 與msleep()的區別__linux

來源:互聯網
上載者:User

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

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

1.)對於模組本身

mdelay是忙等待函數,在延遲過程中無法運行其他任務.這個延遲的時間是準確的.是需要等待多少時間就會真正等待多少時間.

msleep是休眠函數,它不涉及忙等待.你如果是msleep(10),那實際上延遲的時間,大部分時候是要多於10ms的,是個不定的時間值.


2.)對於系統:

mdelay() 會佔用cpu資源,導致其他功能此時也無法使用cpu資源。

msleep() 則不會佔住cpu資源,其他模組此時也可以使用cpu資源。

delay函數是忙則等待,佔用CPU時間;而sleep函數使調用的進程進行休眠。


3.)udelay() mdelay() ndelay() 區別:

udelay(); mdelay(); ndelay();實現的原理本質上都是忙等待,ndelay和mdelay都是通過udelay衍生出來的。

我們使用這些函數的實現往往會碰到編譯器的警告implicit declaration of function 'udelay',這往往是由於標頭檔的使用不當造成的。

在include/asm-***/delay.h中定義了udelay(),而在include/linux/delay.h中定義了mdelay和ndelay.

udelay一般適用於一個比較小的delay,如果你填的數大於2000,系統會認為你這個是一個錯誤的delay函數,因此如果需要2ms以上的delay需要使用mdelay函數。


4.)msleep,ssleep區別:

休眠單位不同


5.)秒的單位

ms是毫秒=0.001秒

us是微秒=0.000001秒

ns是納秒=0.000000001秒

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.