linux驱动开发延迟函数:msleep、mdelay、udelay介绍
linux 延迟函数:msleep、mdelay、udelay等介绍
⼀、这⾥介绍⼀下延时函数msleep、mdelay、udelay等,写驱动的时候偶尔会⽤到,简单说明他们之间的区别。linux下的sleep函数
⼆、这⼏个函数在kernel-3.18\include\linux\delay.h定义。
三、虽然这些函数都有延迟的作⽤,他们的区别如下:
(1)对于模块本⾝,mdelay是忙等待函数,在延迟过程中⽆法运⾏其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间;msleep是休眠函数,它不涉及忙等待.⽤msleep(200)的时候实际上延迟的时间,⼤部分时候是要多于200ms,是个不定的时间值.
(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函数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。