阅读:1695回复:9
设备驱动程序与应用程序通信问题?(中断)
设备驱动程序与应用程序通信问题?(中断)
工作流程。 1。PCI向外设FIFO写入数据- 2。外设读取数据,清空FIFO,产生中断 3。PCI驱动响应中断,通知应用程序传输数据 再返回到第一项 如果我的PCI设备产生了一个中断,我如何通知我的应用 程序呢? 我使用的是DriverStudio开发,用DriverWizard产生框架。 谢谢! |
|
|
沙发#
发布于:2002-06-03 12:55
这个问题前面有很多人问过
最简单的方式是在应用层创建事件(event),将事件句柄传给驱动,然后中断服务后,在dpc例程中讲事件设置为信号态。同时应用层另开一个线程监视这个事件,如果发生则表明中断发生 明白? |
|
|
板凳#
发布于:2002-06-03 13:17
这很简单!
你现在应用层作WriteFile(...),向下就发送了一个IRP_MJ_WRITE的IRP包,驱动接受到后,就执行: 1。PCI向外设FIFO写入IRP所戴的数据; 2。外设读取数据,清空FIFO,产生中断 3。PCI驱动响应中断, 完成此IRP包; 然后:再作ReadFile(...)向下就发送了一个IRP_MJ_READ的IRP包,驱动接受到后,就执行:, 从设备中将数据读取;完成此IRP包; 好了,基本操作就完成了,当然具体实现还有许多工作呢! |
|
地板#
发布于:2002-06-03 14:52
中午刚刚问清楚PCI卡只是作数据收集的功能
即中断一来就将FIFo的数据读入计算机储存起来 不断的收集数据! zydcat你说的线程和事件我没有用过,不太熟悉,颇有困难! blue说的我不太清楚!关键是在中断中如何通知应用程序 让应用程序调用ReadFile(。。)的函数。 谢谢! |
|
|
地下室#
发布于:2002-06-03 17:31
一回生
二回熟, 很简单的。 |
|
|
5楼#
发布于:2002-06-04 10:34
找到一个例子
有一个线程的部分 DWORD WINAPI ThreadProc(LPVOID junkola) { // ThreadProc while(TRUE) { WaitForSingleObject(hEvent, INFINITE); puts(\"Event happened\"); Test_READ_DATA(); } return 0; } 里面的WaitForSingleObject主要完成什么功能呢? 这个程序怎么跳出while()的循环? 它是不是会不断地输出puts(\"Event happened\");和Test_READ_DATA()???? |
|
|
6楼#
发布于:2002-06-04 10:46
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2002-06-04 11:04
找到一个例子 当你的驱动将event置为信号态的后,WaitForSingleObject就会结束,返回正确值,这时你就知道中断发生了,可以读数据了。 while循环你自己可以设置条件退出。 |
|
|
8楼#
发布于:2002-06-07 09:16
根据zydcat的说法
我们先在应用程序上实例化一个事件,开辟了一个线程监视事件的发生;同时在驱动程序中的中断服务程序中设置事件。 问题:1,事件设置后,需要清除吗?在什么地方清除?是不是set()一次,就产生一次事件? 2,应用程序是否要在线程中,先屏蔽硬件中断,处理完成后再打开中断? |
|
|
9楼#
发布于:2002-06-07 09:42
问题:1,事件设置后,需要清除吗?在什么地方清除?是不是set()一次,就产生一次事件?
++++++++++++++++++++++ 当然要清除事件,否则事件一直是信号态,一般在等待事件发生后立即清除事件。 2,应用程序是否要在线程中,先屏蔽硬件中断,处理完成后再打开中断? ++++++++++++++++++++++ 不需要屏蔽中断,除非是你不想要中断发生 |
|
|