阅读:2710回复:27
怎么在驱动中实现微秒级定时(9x/2000)
如题
|
|
|
沙发#
发布于:2002-07-13 17:39
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2002-07-13 18:26
自定义定时器的API是什么?
不要说是KeSetTimer啊,这家伙只能达到10毫秒的级别 |
|
|
地板#
发布于:2002-07-13 19:04
能实现精确的微妙定时吗?我也想知道。
|
|
地下室#
发布于:2002-07-13 21:45
不可能,在windows下
|
|
5楼#
发布于:2002-07-14 12:14
windows不是实时系统,不可能达到如此精确的计时
|
|
|
6楼#
发布于:2002-07-14 15:48
自定义定时器的API是什么? 怎么可能?USB的同步传输就是为每毫秒一帧是确定无疑的。你把Windows 也看的太烂了吧?! |
|
|
7楼#
发布于:2002-07-14 22:11
老虎版主,我是说微秒级啊
|
|
|
8楼#
发布于:2002-07-15 09:56
做不到在windows
|
|
9楼#
发布于:2002-07-15 10:38
10微秒级呢?100微秒级呢?
|
|
|
10楼#
发布于:2002-07-15 11:08
有谁解决过吗?微秒级。
|
|
11楼#
发布于:2002-07-15 11:31
能够达到50微秒级吗?救命啊!我老板要得很急啊!
|
|
|
12楼#
发布于:2002-07-15 13:35
能够达到50微秒级吗?救命啊!我老板要得很急啊! 50微秒绝对没有问题,使用8254就可以了。不过如果你的机器用的是APIC,那么8254的中断优先级很低,你需要提高它的中断优先级。我可以做到20微秒,误差在1%左右 |
|
13楼#
发布于:2002-07-15 13:42
在Windows 2000下应该怎么做呢?兄弟我从来没做过这个。老兄给我讲讲吧,我的Mail:aresljc@163.net QQ:3156557
|
|
|
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的中断优先级高于它才行,否则精度难以保证。 |
|
15楼#
发布于:2002-07-15 14:31
修改8254的的时间间隔我知道,不过这样应该会导致依赖于它的系统时钟发生混乱。
不知道能不能把你的代码给我看看?或者再给我说详细点,Windows内核我接触得不是太多 |
|
|
16楼#
发布于:2002-07-15 14:55
修改8254的的时间间隔我知道,不过这样应该会导致依赖于它的系统时钟发生混乱。 放心好了,在基于APIC的计算机上,8254根本没有用着,系统不是用它来实现多任务调度的,你可以放心使用。用以下的指令可以看一下你的计算机是不是使用了APIC: _asm mov eax,01h; _asm cpuid; // EDX寄存器的Bit9为1时,则表明APIC存在。 |
|
17楼#
发布于:2002-07-15 15:03
那么没有用到APIC的机器呢?据我所知应该是P5以上的机器都有这个,不过也不知道是不是真的。
因为我的程序将来是卖给客户,所以我最好是找出一种通用的方法:( 你说的接管8254的中断是指直接接管IRQ0的IDT吗? 另:我看了你的其它贴子,很PF你的技术,我们能不能找个地方聊一下这个,比如OICQ之类的? |
|
|
18楼#
发布于:2002-07-15 16:10
那么没有用到APIC的机器呢?据我所知应该是P5以上的机器都有这个,不过也不知道是不是真的。 应该说,现在PCI总线的机器基本上都采用了APIC,因为APIC支持多处理器系统。 我们这儿不能上OICQ之类的东东,因为有放火墙~~~不过有什么心得的话可以发消息给我 :P :P :P |
|
19楼#
发布于:2002-07-15 16:19
好哇,怎么发给你呢?
|
|
|
上一页
下一页