cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1779回复:3

武安河书中PCI9054例子的一点疑问,请大家解答,谢谢。

楼主#
更多 发布于:2009-07-30 17:22
要用DMA写数据,所以看了这本书,武安河书中的例子里有这么一段代码:
status = m_CurrentTransfer->Initiate(this, &m_Dma, I.Mdl(),
(I.MajorFunction() == IRP_MJ_READ) ? FromDeviceToMemory : FromMemoryToDevice,
LinkTo(OnDmaReady), &m_Buffer);

这里有个疑问,为什么要加(I.MajorFunction() == IRP_MJ_READ) ? FromDeviceToMemory : FromMemoryToDevice,
根据StartIO的控制,只有当I.MajorFunction() == IRP_MJ_READ时,才会调用SerialRead这个函数,这个条件应该是肯定成立的吧,为什么不直接用FromDeviceToMemory ?还是有别的意义呢??
还有个问题就是,这个例子里面只有SerialRead这个是用的DMA吧,SerialWrite这个函数没用DMA吧?
谢谢大家!
我不是你的天使,我不懂你的天堂
zlf1110
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分39分
  • 威望365点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-08-18 21:25
请把整个函数贴出来,这样无法判断。
zlf1110
Webresource
驱动牛犊
驱动牛犊
  • 注册日期2009-01-13
  • 最后登录2009-09-12
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-08-25 09:49
有可能是写了
wdfbook
驱动牛犊
驱动牛犊
  • 注册日期2009-05-06
  • 最后登录2010-01-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-09-24 15:21
        可以直接用FromDeviceToMemory,没别的意思。
    例子里面只有SerialRead这个是用的DMA,SerialWrite这个函数没用DMA,用的是写入函数。

    放弃DriverStudio,学习WDF吧。事实上,个人认为WDF参考了DS的。二者编程有相似的地方。
    
游客

返回顶部