Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2710回复:27

怎么在驱动中实现微秒级定时(9x/2000)

楼主#
更多 发布于:2002-07-13 15:30
如题
易水
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-13 17:39
用户被禁言,该主题自动屏蔽!
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-13 18:26
自定义定时器的API是什么?
不要说是KeSetTimer啊,这家伙只能达到10毫秒的级别
易水
Hideman
驱动中牛
驱动中牛
  • 注册日期2001-09-11
  • 最后登录2007-04-16
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-13 19:04
能实现精确的微妙定时吗?我也想知道。
liujiang
驱动牛犊
驱动牛犊
  • 注册日期2002-04-01
  • 最后登录2002-11-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-13 21:45
不可能,在windows下

zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-14 12:14
windows不是实时系统,不可能达到如此精确的计时
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-14 15:48
自定义定时器的API是什么?
不要说是KeSetTimer啊,这家伙只能达到10毫秒的级别


怎么可能?USB的同步传输就是为每毫秒一帧是确定无疑的。你把Windows 也看的太烂了吧?!
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-07-14 22:11
老虎版主,我是说微秒级啊
易水
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-07-15 09:56
做不到在windows
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-07-15 10:38
10微秒级呢?100微秒级呢?
易水
wenghh
驱动牛犊
驱动牛犊
  • 注册日期2002-06-13
  • 最后登录2004-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-15 11:08
有谁解决过吗?微秒级。
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2002-07-15 11:31
能够达到50微秒级吗?救命啊!我老板要得很急啊!
易水
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2002-07-15 13:35
能够达到50微秒级吗?救命啊!我老板要得很急啊!

50微秒绝对没有问题,使用8254就可以了。不过如果你的机器用的是APIC,那么8254的中断优先级很低,你需要提高它的中断优先级。我可以做到20微秒,误差在1%左右
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2002-07-15 13:42
在Windows 2000下应该怎么做呢?兄弟我从来没做过这个。老兄给我讲讲吧,我的Mail:aresljc@163.net QQ:3156557
易水
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2002-07-15 14:24
在Windows 2000下应该怎么做呢?兄弟我从来没做过这个。老兄给我讲讲吧,我的Mail:aresljc@163.net QQ:3156557

简单地说:
1。修改8254的定时间隔
2。修改APIC的设置,使得8254定时器的中断优先级为最高,需要高于系统时钟
3。如果你愿意,截获8254的中断/如果你不愿意的话,直接用IoConnectInterrupt估计也行。

主要需要参考一下APIC的有关资料,可以在Intel的官方网站上下载。

在基于APIC-HAL的Windows 2000系统中,系统时钟的中断向量为0D1H,在单处理器系统中,这是正常情况下最高的中断优先级了,你必须设法使得8254的中断优先级高于它才行,否则精度难以保证。
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2002-07-15 14:31
修改8254的的时间间隔我知道,不过这样应该会导致依赖于它的系统时钟发生混乱。
不知道能不能把你的代码给我看看?或者再给我说详细点,Windows内核我接触得不是太多
易水
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2002-07-15 14:55
修改8254的的时间间隔我知道,不过这样应该会导致依赖于它的系统时钟发生混乱。
不知道能不能把你的代码给我看看?或者再给我说详细点,Windows内核我接触得不是太多

放心好了,在基于APIC的计算机上,8254根本没有用着,系统不是用它来实现多任务调度的,你可以放心使用。用以下的指令可以看一下你的计算机是不是使用了APIC:

_asm mov eax,01h;
_asm cpuid; // EDX寄存器的Bit9为1时,则表明APIC存在。
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
17楼#
发布于:2002-07-15 15:03
那么没有用到APIC的机器呢?据我所知应该是P5以上的机器都有这个,不过也不知道是不是真的。

因为我的程序将来是卖给客户,所以我最好是找出一种通用的方法:(

你说的接管8254的中断是指直接接管IRQ0的IDT吗?


另:我看了你的其它贴子,很PF你的技术,我们能不能找个地方聊一下这个,比如OICQ之类的?
易水
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2002-07-15 16:10
那么没有用到APIC的机器呢?据我所知应该是P5以上的机器都有这个,不过也不知道是不是真的。

因为我的程序将来是卖给客户,所以我最好是找出一种通用的方法:(

你说的接管8254的中断是指直接接管IRQ0的IDT吗?


另:我看了你的其它贴子,很PF你的技术,我们能不能找个地方聊一下这个,比如OICQ之类的?

应该说,现在PCI总线的机器基本上都采用了APIC,因为APIC支持多处理器系统。

我们这儿不能上OICQ之类的东东,因为有放火墙~~~不过有什么心得的话可以发消息给我 :P :P :P
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2002-07-15 16:19
好哇,怎么发给你呢?
易水
上一页
游客

返回顶部