kucy_zhou@163.c
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2005-11-04
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:986回复:4

我这么做行么?

楼主#
更多 发布于:2004-03-26 15:42
我想在中断到来后从板卡上取得数据,然后存盘我用的kerneldriver做的。我是用共享事件做的
HEV=CreateEvent(产生了一个信号,然后用AMCC5920_GetEvent(hAMCC5920,HEV);
void AMCC5920_GetEvent(AMCC5920_HANDLE hAMCC5920,HANDLE hEvent)
{
DeviceIoControl(hAMCC5920, IOCTL_AMCC5920_GET_EVENT,(PVOID)&hEvent, sizeof(HANDLE));
}
传送信号句柄给驱动程序。
在驱动程序中我的程序用
ObReferenceObjectByHandle
然后在中断处理程序中给信号置位:kesetevent(),我想着应该是中断来我就给信号置位,应用程序用WaitForSingleObject等待信号等到后,从板卡中取数据存文件。然后下次中断来了,又给信号置位,就这样中断来一次,取一次数据。可是事实上好像不行,每次中断只能来一个,不知什么原因是不是这样做不行?


我想着用共享内存,这样是不是速度要快些呢?
kucy_zhou@163.c
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2005-11-04
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-30 10:44
能给些具体的提示么,那我用在中断中读完数据,是不是还得用共享事件的方法通知应用程序,要不然我的应用程序怎么知道什么时候读呢?
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-29 19:21
是共享内存么?
用那种共享内存方法比较好呢?

不建议使用共享内存,这对你的问题没有帮助,我的意思是建立缓冲区,中断时读出数据写入缓冲,应用程序发READ请求来的时候从缓冲里吧数据送上去(有多数实现方式,比如你可以考虑使用环形队列做为缓冲)
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
kucy_zhou@163.c
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2005-11-04
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-29 14:32
是共享内存么?
用那种共享内存方法比较好呢?
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-27 02:37
本来应该是可以的,可是我怀疑你的中断来得太快
另外,如果你用这种方式,最好使用AutoResetEvent,这样丢中断的机会比较少,但我认为还是会丢的,所以我想你还是应该在驱动程序中建立缓冲区。
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
游客

返回顶部