Linux ndelay()很不准怎么回事,ndelay(1),结果延时了1us?

Linux ndelay()很不准怎么回事,ndelay(1),结果延时了1us?,第1张

所有的 sleep/delay 类型的接口,都只能保证休眠时间 "不短于" 传入的参数,但是无法保证绝对精确。精确度和底层实现机制有关(理论上讲任何实现都会有一个最小精度的,比如1us 或者1ms,如果试图delay一个小于最小精度的时长,最终效果就是大于等于最小精度的),也和其他因素有关,比如cpu核数,进程/线程数,优先级,任务调度等。 所以一般只能保证 "不短于" ,无法保证绝对精确。

0.5微秒延迟相当于纳秒级的了,内核空间有提供纳秒级的延迟

#include <linux/delay.h>

ndelay(int n) 延时n纳秒

但是时间应该是不准的。

较为准确的延迟可以用select,但也只是us级的。

struct timeval tv

tv.tv_sec=0

tv.tv_usec=iUsec //微秒

select(0,NULL,NULL,NULL,&tv)


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存