0

有一个 PCI 卡连接到 PC,我们有一个相同的 GUI。我们要在 RAM 中分配大约 400 到 600 MB 物理内存的 DMA 缓冲区,以便从 PCI 卡中读取/写入(FPGA 在 PCI 卡中进行读取/写入操作)。我们正在使用 JUNGO windows PCI 驱动程序。JUNGO 提供了一个 WDC_DMAContigBufLock 方法,通过 Contiguous 或 scatter/Gather 方法分配 DMA Buffer。我们可以在 RAM 中创建最多 63MB 的缓冲区,但不能创建超过 63MB 的缓冲区。操作系统是 Windows XP 32 位,RAM 大小为 4GB(相对 3 GB 是免费的)。

应用程序 (GUI) 是用 C# .Net 编写的,并尝试通过此应用程序创建 400 – 600MB 的 DMA 缓冲区。我正在寻找可能导致/阻止我创建 400 - 600MB 缓冲区大小的解决方案/想法。

谢谢

4

1 回答 1

3

用于 DMA 缓冲区的页面是从非分页内核内存池中分配的。这是 Windows 中的宝贵资源,您不能合理地要求如此巨大的分配。从文档中不清楚 WD_DMALock() 函数是否对请求设置了上限,或者您只是要求太多而 Windows 拒绝该请求,或者您的机器在内存池。它不会有 500 兆字节,这是肯定的。XP 上的默认大小是 256 MB iirc。

更多关于此的常见问题解答。显然,您无法可靠地按预期进行这项工作,将传输拆分为更合理大小的较小请求。

于 2013-01-23T15:03:45.597 回答