阅读:1662回复:5
中断例程与数据采集问题求助,项目很急,那位能留个联系方式!
windows2000下的pci多路数据采集卡,当硬件板卡发生中断时,需要应用程序判断是哪一路输入发生的的中断,并读出中断发生时,这一路已经采集到多少个数据,然后根据这个值取回真正采集的数据.因为是多路,当有多个中断发生时,就必须要读取每一路的信号,所以相应中断后,会有多个io操作!问这段中断程序在驱动里如何实现,这些io的操作是由应用程序发起,还是在驱动程序相应中断后,直接在驱动程序里读取呢,如果这样,完成这些操作后,如何通知应用程序呢?而如果驱动相应中断后,立即通知应用程序,由应用程序通过DeviceIoControl完成上述操作可行否?这样的话,驱动又如何通知应用程序中断了呢?请帮忙,急,谢!
项目很急,那位能留个联系方式! |
|
|
沙发#
发布于:2005-07-09 12:42
1。io操作应该由驱动来完成,大部分操作都放在dpc例程中完成。
2。通知应用程序有很多办法,比较常见的应用程序通过ReadFile,或者DeviceIoControl同步等待,驱动里先返回Pending状态,有数据的时候完成这个Irp就可以了 |
|
板凳#
发布于:2005-07-09 13:50
谢谢,再问假如我用ReadFile来读数据,那是不是要在应用程序里做一个读循环,能不能做到驱动相应中断处理后再通知应用程序?不是很懂的说!
|
|
|
地板#
发布于:2005-07-09 15:45
你是需要在应用程序里做一个读循环,只有当驱动完成这个Irp,ReadFile才返回,不然这个读线程就一直处于睡眠状态.
|
|
地下室#
发布于:2005-07-09 20:30
数据量不大(或者说,不频繁)的话,drv将数据先保存,通过event方式通知app,app再用deviceiocontrol取数据
或者,app也可以主动发起采集数据的行为,比如调readfile,drv将irp给pending,打开中断,采集足够的数据,然后完成irp |
|
5楼#
发布于:2005-07-09 20:38
但在中断发生时,我需要读取多路数据,所以除了读数据外,可能要要读写一些控制字以判断目前是哪一路或哪几路产生的中断,同时写控制字以控制要读取那一路的数据。以上这些都在中断例程中完成吗,应用程序中用一个ReadFile能对应两个io(两种类型io或memory)的读写操作吗?ReadFile的缓冲区如何跟驱动对应呢?谢谢。
问题是不知道是哪一路发生的中断信号,或同时有几路信号发生中断,所以要先判断中断的状态,然后根据这些状态,写回相应的控制字,控制读哪路数据! |
|
|