时间延时杂论

简介: 关于短延迟:延迟通过使用jiffies达不到目的,只能使用内核函数:udelay(unsigned long usecs);mdelay(unsigned long msecs);前者用软件循环指定的微妙数,后者调用前者达到延迟毫秒级。
关于短延迟:
延迟通过使用jiffies达不到目的,只能使用内核函数:

udelay(unsigned long usecs);
mdelay(unsigned long msecs);

前者用软件循环指定的微妙数,后者调用前者达到延迟毫秒级。udelay函数只能用于获取较短的时间延迟,因为loops_per_second值的精度只有8位,所以,当计算更长的延迟时会积累出相当大的误差。尽管最大能允许的延迟将近1秒(因为更长的延迟就要溢出),推荐的 udelay 函数的参数的最大值是取1000微秒(1毫秒)。延迟大于 11 毫秒时可以使用函数 mdelay。
要特别注意的是 udelay 是个忙等待函数(所以 mdelay 也是),在延迟的时间段内无法运行其他的任务,因此要十分小心,尤其是 mdelay,除非别无他法,要尽量避免使用。 
mdelay 在 Linux 2.0 中并不存在,头文件 sysdep.h 弥补了这一缺陷。 
 

在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay.

虽然msleep和mdelay都有延迟的作用,但他们是有区别的.

mdeday还忙等待函数,在延迟过程中无法运行其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间.而msleep是休眠函数,它不涉及忙等待.你如果是msleep(10),那实际上延迟的时间,大部分时候是要多于10ms的,是个不定的时间值.

他们的差异,平时我也讲的出来,可是真正用起来的时候,就忘记了.曾在两个driver的i2c的code中,需要用到delay函数,而我用了msleep函数,一直I2C速度超慢.而我又不知道哪里出了问题,我潜意识中,认为我只delay了1ms,可是,实际上是十几毫秒

相关文章
|
10月前
|
Linux C语言 C++
现代c++中实现精确延时方法总结
现代c++中实现精确延时方法总结
|
传感器 芯片
使用系统定时器SysTick实现精确延时微秒和毫秒函数
使用系统定时器SysTick实现精确延时微秒和毫秒函数
338 0
使用系统定时器SysTick实现精确延时微秒和毫秒函数
|
消息中间件
延时队列优化 (2)
在这里新增了一个队列QC,绑定关系如下,该队列不设置TTL时间
延时队列优化 (2)
|
JavaScript 算法 前端开发
不到一秒才叫优化
之前做完的一个项目,业务逻辑写完之后,首屏渲染能到3~4秒,这对于用户体验是不能接受的,所以忙里偷闲把项目优化完之后http发送到响应时间:705ms,DOM构建完毕:452ms,页面加载完毕:678ms,清爽的感觉很上头~看来优化还是很有必要的!所以本篇记录一下优化过程。
206 0
|
Web App开发 编解码 边缘计算
直播中那几秒延时到底来自哪?
7月16日,亚太内容分发大会上,阿里云高级产品运营专家俞翔受邀出席,并分享了基于CDN网络构建超低延时直播的场景实践。以下为演讲原文。
2032 0
直播中那几秒延时到底来自哪?
|
SQL 存储 算法
翻动100万级的数据 —— 只需几十毫秒
感谢大家的支持!!! 昨天发了一个邀请,邀请大家帮忙测试,效果还可以,下面小结一下: 通过内部的计数器得知:访问次数是1071(其中有好多是自己点的:)),人数不是太理想,本来是想看看上万人同时访问的情况:) 系统资源的占用情况内存 —— 很理想。
1708 0
|
C# 网络协议
c#获取网络时间并同步本地时间
原文:c#获取网络时间并同步本地时间 通过TCP形式来获取NTP时间。主要代码如下: [DllImport("kernel32.dll")] private static extern bool SetLocalTime(ref Systemtime time); [StructLayout(LayoutKind.
2978 0