阅读:1830回复:3
武安河书中PCI9054例子的一点疑问,请大家解答,谢谢。
要用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吧? 谢谢大家! |
|
|
沙发#
发布于:2009-08-18 21:25
请把整个函数贴出来,这样无法判断。
|
|
|
板凳#
发布于:2009-08-25 09:49
有可能是写了
|
|
地板#
发布于:2009-09-24 15:21
可以直接用FromDeviceToMemory,没别的意思。
例子里面只有SerialRead这个是用的DMA,SerialWrite这个函数没用DMA,用的是写入函数。 放弃DriverStudio,学习WDF吧。事实上,个人认为WDF参考了DS的。二者编程有相似的地方。 |
|