讨论Windows系统下ISR实时性问题 点击:2034 | 回复:1



国安

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 242回
  • 年度积分:0
  • 历史总积分:256
  • 注册:2002年4月15日
发表于:2002-05-25 08:55:00
楼主
DOS的时代已经过去了,可是仍很怀念它的ISR:简单、高效。 到了WINDOWS中虽然界面好看了许多,可是中断实在是没法快起来...好象再怎么样,板卡的中断优先级都高不过MOUSE。测试例程不论用什么方法,只要在RING3,只要摇几下MOUSE,示波器上看到的响应时间就到了ms级。好怀念DOS下us级的响应... 大家有什么好的方法吗请多指教!



国安

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 242回
  • 年度积分:0
  • 历史总积分:256
  • 注册:2002年4月15日
发表于:2002-05-25 08:55:00
1楼
呵呵,怎么没人回答这个问题?我原来做过一些试验,结果如下: 在Windows下的中断调用主要有三种方式实现: 1.通过handle。用户程序中定义一个handle,在driver中如有中断产生就把该handle置为有效。在用户程序中用WaitforSingleObject来检测该handle是否有效。 2.通过ISR。用户编制中断服务程序作为一个函数,把该函数地址给driver,driver在有中断产生时回调该函数。 3.通过message。用户自定义一个message,并把该message发给driver,driver在中断产生时把该message插入消息队列,而用户程序中对该消息进行检测。 测试时采用PCI总线DIO板卡,中断用外部脉冲产生,接到中断后立刻产生DO,用示波器量产生脉冲与DO输出间时延。 DOS下用ISR: 2.5微秒 1.4-8微秒 Win98下用DLL(VXD): 34微秒 34-62微秒 Win98下用DASK(WDM)通过Handle: 80微秒 80-148微秒 Win98下用DASK(WDM)通过ISR: 500微秒-20毫秒 Win98下用DASK(WDM)通过Message: 134微秒 110-180微秒 NT4下用DASK(WDM)通过Handle: 18.4微秒 NT4下用DASK(WDM)通过ISR: 18.6微秒 NT4下用DASK(WDM)通过Message: 60微秒 52-180微秒 ISA板卡与PCI板卡时间区别不大。 Win2000下与NT4下结果接近。

热门招聘
相关主题

官方公众号

智造工程师