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

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

楼主#
更多 发布于:2002-07-13 15:30
如题
易水
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-18 14:47
用什么中断好呢?
易水
guard2002
驱动中牛
驱动中牛
  • 注册日期2002-05-21
  • 最后登录2017-03-07
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望65点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-18 12:26
如果在驱动中可用中断呀
nofer
驱动中牛
驱动中牛
  • 注册日期2001-06-08
  • 最后登录2008-12-17
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-18 09:54
如果你只是想在W2000下等待若干微秒可用KeStallExecutionProcessor()
[img]http://www.driverdevelop.com/forum/upload/nofer/2002-11-16_32_740_5.jpg[/img] [size=3]想着梦中天堂的样子不知不觉睡着了。。。。 [/size]
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-07-16 15:01
修改8254的计数值就是直接端口操作吗?
接管IRQ0直接修改IDT就可以了吗?
易水
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-07-15 23:08
好哇,怎么发给你呢?

登陆驱动开发论坛的首页,上面有收件箱,好象可以发的吧。 :P
ericlei
驱动牛犊
驱动牛犊
  • 注册日期2001-07-12
  • 最后登录2002-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-15 20:22
xdjm说的没错,我原来用板上8253做中断实现过微秒,不过当时是在nt上(98年),2000上没做过但想来也差不多,所以用这个一定可以实现,大兄弟你放心好了
Best regards
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-15 18:17
up!

兄弟,灌水请上水坛,你这么干只会引起大家反感!你不觉得无聊吗? 请自行删除!

[编辑 -  7/15/02 by  dazzy]
zgqzxr
驱动牛犊
驱动牛犊
  • 注册日期2002-05-20
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-15 17:54
up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!vup!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!vup!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!vup!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!up!vup!up!up!
洪武沿门托钵日,淮阴胯下受辱时; 贫贱不改四海志,二十年后知雄雌。 ――毕业留题
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-07-15 16:19
好哇,怎么发给你呢?
易水
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于: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分
  • 社区居民
11楼#
发布于: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分
  • 社区居民
12楼#
发布于: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分
  • 社区居民
13楼#
发布于:2002-07-15 14:31
修改8254的的时间间隔我知道,不过这样应该会导致依赖于它的系统时钟发生混乱。
不知道能不能把你的代码给我看看?或者再给我说详细点,Windows内核我接触得不是太多
易水
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 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分
  • 社区居民
16楼#
发布于: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分
  • 社区居民
17楼#
发布于:2002-07-15 11:31
能够达到50微秒级吗?救命啊!我老板要得很急啊!
易水
wenghh
驱动牛犊
驱动牛犊
  • 注册日期2002-06-13
  • 最后登录2004-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-07-15 11:08
有谁解决过吗?微秒级。
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2002-07-15 10:38
10微秒级呢?100微秒级呢?
易水
上一页
游客

返回顶部