发表于: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下结果接近。