2013-01-23 46 views
0

有一個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是免費的)。如何在Windows XP中分配500 MB的DMA緩衝區

應用程序(GUI)是用C#.Net編寫的,嘗試創建400 - 600MB的DMA緩衝區是通過此應用程序。我正在尋找解決方案/想法什麼可能導致/阻止我創建400 - 600MB的緩衝區大小。

謝謝

回答

2

用於DMA緩衝區的頁面是從非分頁內核內存池中分配的。這是Windows中的寶貴資源,你不能合理地要求這麼大的分配。從文檔中不清楚WD_DMALock()函數是否對請求設置了上限,或者您只是要求過多而Windows拒絕請求,或者您的計算機沒有那麼多空間內存池。它不會有500兆字節,這是肯定的。 XP上的默認大小爲256 MB iirc。

關於此問題的更多信息請登錄the FAQ。很明顯,您無法可靠地按預期做好這項工作,將轉移分成更合理規模的較小請求。

+0

嗨漢斯,感謝您的回覆!在增加註冊表中的非分頁內存池之前,我只能分配30MB的緩衝區。 Jungo表示可以創建500 MB的內存,但無法從我身邊完成。有沒有什麼方法可以在不使用Jungo API的情況下創建緩衝區? – Venu

+1

你嚴重缺少這個答案的重點。唯一真正的解決辦法是教育你自己,拿起Windows Internals的副本並閱讀談論內核內存池的章節。 –