阅读:1376回复:4
PCI驱动的问题
在WIN98下做的VXD持续抄收100M比特的数据没有什么问题
可是移植到2000下却碰到以下一些问题: 我的想法是开四块缓冲区,用AllocateCommonBuffer 分配,得到va以及pa, 然后用 //i=0---3 dx->pMdl=IoAllocateMdl(dx->va,TRANSFER,FALSE,FALSE,NULL) MmBuildMdlForNonPagedPool(dx->pMdl); dx->pUserBuffer=MmMapLockedPages(dx->pMdl,UserMode) 当TRANSFER=16384的时候是好的 当TRANSFER>16384的时候就不对了 为什么呢? 另外我想问一下,我这种方式好不好? 有没有更好的办法有效的接受如此高速的数据? (最高可能达到160M比特) [编辑 - 6/24/03 by leaf_xx75] |
|
沙发#
发布于:2003-06-24 21:22
我不明白
你为什么要用直接IO,你为什么不用DMA呢,我看你应该是有卡的呀。这样会好很多的 |
|
|
板凳#
发布于:2003-06-26 12:29
我当然是用DMA方式的呀(总线主控)
我是首先 用AllocateCommonBuffer分配四块缓冲区 得到它的pa,va,然后就va通过上面的函数映射到用户 空间,这样我在应用端就可以直接访问了,然后我就启动DMA传送 中断来了以后就设置传送下一块,这样来回倒 只是我要求传送的速率特别高(现在10M字节) 我只是想把缓冲区开大一点,结果开不大 我不知道用什么方式更好一点, |
|
地板#
发布于:2003-06-26 13:23
这应该是最好的办法。
|
|
地下室#
发布于:2003-06-28 00:53
不用郁闷了,2000下分配物理内存有限制,很难分配大,我劝你还是使用scattergather,这样就没问题了!
|
|