linuxsleep函数不准

linuxsleep函数不准,第1张

linuxsleep函数不准解决办法如下:

如下面的一段程序:

应用程序:

#include <syswait.h>

usleep(n) //n微秒

Sleep(n)//n毫秒

sleep(n)//n秒

驱动程序:

#include <linux/delay.h>

mdelay(n) //milliseconds 其实现

#ifdef notdef

#define mdelay(n) (\

{unsigned long msec=(n)while (msec--) udelay(1000)})

#else,linuxsleep函数不准就可以调整为正确的了。

1.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函数。 2.由于这些delay函数本质上都是忙等待,对于长时间的忙等待意味这无谓的耗费着cpu的资源,因此对于毫秒级的延时,内核提供了msleep,ssleep等函数,这些函数将使得调用它的进程睡眠参数指定的时间。 应用层: #include <unistd.h> 1、unsigned int sleep(unsigned int seconds)秒级 2、int usleep(useconds_t usec) 微秒级:1/10^-6 #define _POSIX_C_SOURCE 199309 #include <time.h> 3、int nanosleep(const struct timespec *req, struct timespec *rem) struct timespec { time_t tv_sec /* seconds */ long tv_nsec /* nanoseconds */ } // The value of the nanoseconds field must be in the range 0 to 999999999. 内核层: include <linux/delay.h> 1、void ndelay(unsigned long nsecs)纳秒级:1/10^-10 2、void udelay(unsigned long usecs)微秒级: 1/10^-6 3、void mdelay(unsigned long msecs)毫秒级:1/10^-3 sleep_on(), interruptible_sleep_on()sleep_on_timeout(), interruptible_sleep_on_timeout()根据你的情况选用这些函数,注意: sleep *** 作在kernel必须小心、小心。。。 udelay()等函数是cpu忙等,没有传统意义上的sleep。这些函数相当于我们平时的阻塞读、写之类的语义,主要用于等外设完成某些 *** 作


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7098044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存