leaf_xx75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2004-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1377回复:4

PCI驱动的问题

楼主#
更多 发布于:2003-06-24 17:26
在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]
wangmqi
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-28 00:53
不用郁闷了,2000下分配物理内存有限制,很难分配大,我劝你还是使用scattergather,这样就没问题了!
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-26 13:23
这应该是最好的办法。
leaf_xx75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2004-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-26 12:29
我当然是用DMA方式的呀(总线主控)
我是首先  用AllocateCommonBuffer分配四块缓冲区
得到它的pa,va,然后就va通过上面的函数映射到用户
空间,这样我在应用端就可以直接访问了,然后我就启动DMA传送
中断来了以后就设置传送下一块,这样来回倒

只是我要求传送的速率特别高(现在10M字节)
我只是想把缓冲区开大一点,结果开不大
我不知道用什么方式更好一点,
zytzjx
驱动牛犊
驱动牛犊
  • 注册日期2001-12-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-06-24 21:22
我不明白
你为什么要用直接IO,你为什么不用DMA呢,我看你应该是有卡的呀。这样会好很多的
Wecan
游客

返回顶部