第一类延时函数原型是:(忙等) ( 头文件是 #include<linux/delay.h> )
void ndelay(unsigned long nsecs);
void udelay(unsigned long usecs);
void mdelay(unsigned long msecs);
说明:内核函数 ndelay, udelay, 以及 mdelay 对于短延时好用,分别延后执行指定的纳秒数,微秒数或者毫秒数。它们涉及到的延时常常是最多几个毫秒。
第二类延时函数原型是:(使进程进入休眠)
void msleep(unsigned int millisecs);
unsigned long msleep_interruptible(unsigned int millisecs);
void ssleep(unsigned int seconds)
这类方法获得毫秒 (和更长) 延时而不用涉及到忙等待,前 2 个函数使调用进程进入睡眠给定的毫秒数.
一个对 msleep 的调用是不可中断的;你能确保进程睡眠至少给定的毫秒数.
如果你的驱动位于一个等待队列并且你想唤醒来打断睡眠,使用 msleep_interruptible. 从 msleep_interruptible 的返回值正常地是 0; 如果这个进程被提早唤醒,返回值是在初始请求睡眠周期中剩余的毫秒数。对 ssleep 的调用使进程进入一个不可中断的睡眠给定的秒数.
区别:
mdelay 是忙等待函数,在延迟过程中无法运行其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间.
msleep 是休眠函数,它不涉及忙等待&#