有一个PCI卡连接到PC,我们有一个相同的GUI。我们希望在RAM中分配大约400到600 MB物理内存的DMA缓冲区,以便从PCI卡读取/写入(FPGA在PCI卡中执行读/写操作)。我们正在使用JUNGO windows PCI驱动程序。 JUNGO提供了一种WDC_DMAContigBufLock方法,用于通过连续或分散/聚集方法分配DMA缓冲区。我们能够在RAM中创建高达63MB的缓冲区,并且无法创建超过63MB的缓冲区。操作系统是Windows XP 32位,RAM大小为4GB(相对3 GB是免费的)。
应用程序(GUI)是用C#.Net编写的,试图通过这个应用程序创建一个400到600MB的DMA缓冲区。我正在寻找解决方案/想法可能导致/阻止我创建400 - 600MB的缓冲区大小。
由于
答案 0 :(得分:3)
用于DMA缓冲区的页面是从非分页内核内存池中分配的。这是Windows中的宝贵资源,你不能合理地要求这么大的分配。从文档中不清楚WD_DMALock()函数是否对请求设置了上限,或者您只是要求太多而Windows拒绝请求或者您的计算机根本没有那么大的空间内存池。它不会有500兆字节,这是肯定的。 XP上的默认大小为256 MB iirc。
the FAQ中的更多相关信息。显然,您无法可靠地按预期方式工作,将转移分成更合理的小型请求。