Linux下timer延时的使用
http://blog.csdn.net/hzpeterchen/article/details/8090385
因笔者工作在嵌入式平台上(非x386),下面给出的结论仅在arm平台上测试过。
1. 在原子上下文,延迟应该少于100微秒。
使用udelay
2. 在非原子上下文延迟的使用
0-100us: 使用udelay
100us以上: 使用usleep_range
20ms以上且不要求精确: 使用msleep
msleep不精确,完全可以用usleep_range代替。
可以参考的文档:Documentation/timers/timers-howto.txt
下面是在Freescale i.mx6Q (arm Cortex A9, 1.0Ghz, Qual-core)平台上的测试结果,
使用的内核版本是: 3.7.0-rc1+
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:99:usleep_range:119
1ms delaycompare: mdelay:998: msleep10429: usleep_range:1017
5ms delaycompare: mdelay:5004: msleep18480: usleep_range:5017
10ms delaycompare: mdelay:9991: msleep19431: usleep_range:10020
20ms delaycompare: mdelay:19987: msleep24205: usleep_range:20019
25ms delaycompare: mdelay:24995: msleep39140: usleep_range:25021
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:100:usleep_range:119
1ms delaycompare: mdelay:998: msleep10404: usleep_range:1017
5ms delaycompare: mdelay:5003: msleep18486: usleep_range:5017
10ms delaycompare: mdelay:9993: msleep19455: usleep_range:10027
20ms delaycompare: mdelay:19990: msleep24168: usleep_range:20021
25ms delaycompare: mdelay:25004: msleep39137: usleep_range:25020
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:100:usleep_range:119
1ms delaycompare: mdelay:998: msleep10340: usleep_range:1017
5ms delaycompare: mdelay:5005: msleep18480: usleep_range:5016
10ms delaycompare: mdelay:9990: msleep19427: usleep_range:10014
20ms delaycompare: mdelay:19999: msleep24205: usleep_range:20013
25ms delaycompare: mdelay:24996: msleep39144: usleep_range:25024
10us delaycompare: udelay:10:usleep_range:33
100us delaycompare: udelay:100:usleep_range:116
1ms delaycompare: mdelay:998: msleep10387: usleep_range:1014
5ms delaycompare: mdelay:5007: msleep18484: usleep_range:5013
10ms delaycompare: mdelay:9997: msleep19454: usleep_range:10024
20ms delaycompare: mdelay:19990: msleep24179: usleep_range:20020
25ms delaycompare: mdelay:24997: msleep39140: usleep_range:25018
10us delaycompare: udelay:10:usleep_range:35
100us delaycompare: udelay:100:usleep_range:119
1ms delaycompare: mdelay:998: msleep10330: usleep_range:1017
5ms delaycompare: mdelay:5005: msleep18482: usleep_range:5016
10ms delaycompare: mdelay:9991: msleep19433: usleep_range:10021
20ms delaycompare: mdelay:19989: msleep24203: usleep_range:20020
25ms delaycompare: mdelay:24993: msleep39145: usleep_range:25022
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:100:usleep_range:120
1ms delaycompare: mdelay:998: msleep10383: usleep_range:1017
5ms delaycompare: mdelay:5004: msleep18486: usleep_range:5017
10ms delaycompare: mdelay:9994: msleep19451: usleep_range:10023
20ms delaycompare: mdelay:19991: msleep24171: usleep_range:20022
25ms delaycompare: mdelay:24998: msleep39141: usleep_range:25020
Linux下timer延时的使用的更多相关文章
- (笔记)Linux下的准确延时,#include <linux/delay.h>调用出错
在编写应用层程序时,有时需要延时一下,这个时候该怎么办呢? 在内核代码中,我们经常会看到这样的头文件使用#include <linux/delay.h>,心想着直接调用这个就可以了吧!可是 ...
- 八、Linux下的网络服务器模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器,按处理方式来分有循环服务器和并发服务器. 在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提 ...
- Linux下select, poll和epoll IO模型的详解
http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll 介绍 Epoll 可是当前在 Linux 下开发大规模并发网络程序的热 ...
- (转)Linux下select, poll和epoll IO模型的详解
Linux下select, poll和epoll IO模型的详解 原文:http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll ...
- linux 下各errno的意义(转)
linux 下各errno的意义(转) 本文转自:http://blog.csdn.net/kofiory/article/details/5790409 strerror(errno):获取er ...
- Linux下的虚拟Bridge实现
http://www.cnblogs.com/zmkeil/archive/2013/04/21/3034733.html Linux下的Bridge也是一种虚拟设备,这多少和vlan有点相似,它依赖 ...
- Linux下的C编程实战
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...
- Linux下串口编制【转】
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- Linux下的微秒级定时器: usleep, nanosleep, select, pselect
Linux下的微秒级定时器: usleep, nanosleep, select, pselect 标签: linuxnulldelaystructdate 2012-02-07 23:29 4979 ...
随机推荐
- Zabbix结合Grafana绘图
参考网站: https://www.jianshu.com/p/6eec985c5c94 注意事项: 1.在ganafa添加datasource的时候url写成http://10.116.33.116 ...
- Linux开机挂载windows共享文件夹
https://blog.csdn.net/zhaogang1993/article/details/79573271 (可行) 命令: mount -t cifs -o username=&quo ...
- java ee7 配置文件
java ee7 配置文件 1. 项目目录 # ee pom.xml Maven构建文件 /src/main/java Java源文件 /src/main/resource ...
- Spring MVC 自定义类型转换器
新建一个自定义转换器 import org.springframework.core.convert.converter.Converter; import org.springframework.s ...
- xcode显示行号show gutter
要在每一个代码编辑窗口中的边线里显示行号: 使用Xcode > Preferences 菜单命令,点击 Text Editing,然后选择Editing 然后点击选择 “Line numbers ...
- tomcat的catalina.out日志文件过大
今天发现一个服务器的/opt目录数据过大,最后发现是tomcat中的catalina.out日志过大引起的 用du命令查看opt下一层的数据文件大小 [root@ccssapportalp opt]# ...
- UIButton 点击事件传参数
#import <objc/runtime.h> UIButton *btn = // create the button objc_setAssociatedObject(btn, &q ...
- conflicting types for ‘方法名’ 的错误
将main()的实现写在drawShapes(),drawCircle(),drawRectangle()...之前. 结果编译的时候出现了 conflicting types for " ...
- Null value was assigned to a property of primitive type setter of"原因及解决方法
在action请求数据的过程中报出"Null value was assigned to a property of primitive type setter of"错误,搜索之 ...
- 全屏幕显示AVI
uses Unit2; procedure TForm1.Button1Click(Sender: TObject);begin Form2.Show; Form2.WindowState := ...