2013-01-23 2 views
0

Une carte PCI est connectée au PC et nous avons une interface graphique pour celle-ci. Nous voulons allouer un tampon DMA d'environ 400 à 600 Mo de mémoire physique dans la RAM afin de lire/écrire à partir de la carte PCI (le FPGA effectue une opération de lecture/écriture dans une carte PCI). Nous utilisons le pilote JUNGO Windows PCI. Il existe une méthode WDC_DMAContigBufLock fournie par JUNGO pour allouer le tampon DMA par des méthodes contiguës ou de dispersion/collecte. Nous pouvions créer jusqu'à 63 Mo de mémoire tampon dans la RAM et ne pouvions pas créer plus de 63 Mo. Le système d'exploitation est Windows XP 32 bits et la taille de la RAM est de 4 Go (Relativement 3 Go est gratuit). Application (GUI) est écrit en C# .Net et en essayant de créer un tampon DMA de 400 - 600 Mo est à travers cette application. Je suis à la recherche de solutions/Idées ce qui pourrait causer/m'arrêter de créer une taille de tampon de 400 à 600 Mo.Comment allouer un tampon DMA de 500 Mo dans Windows XP

Merci

Répondre

2

Les pages utilisées pour le tampon DMA sont attribués à partir du pool de mémoire du noyau non paginée. C'est une ressource précieuse dans Windows, vous ne pouvez pas raisonnablement demander une allocation aussi énorme. Les docs ne voient pas clairement si la fonction WD_DMALock() met une limite supérieure à la demande ou si vous demandez trop de choses et si Windows refuse la demande ou si votre machine n'a tout simplement pas beaucoup d'espace dans la requête. pool de mémoire. Il n'aura pas 500 mégaoctets, c'est certain. La taille par défaut sur XP est de 256 Mo iirc.

Plus à ce sujet dans the FAQ. Il est clair que vous ne pouvez pas effectuer ce travail de manière fiable, divisez le transfert en plus petites requêtes plus raisonnables.

+0

Salut Hans, Merci pour la réponse! Je pourrais pouvoir allouer seulement 30MB de mémoire avant que j'augmente le pool de mémoire non-paginé dans le registre. Jungo dit qu'il est possible de créer 500 Mo de mémoire, mais je ne pouvais pas le faire de mon côté. Est-il possible de créer un tampon sans utiliser les API de Jungo? – Venu

+1

Vous manquez sérieusement le point de cette réponse. Le seul véritable remède pour cela est de vous éduquer, de prendre une copie de Windows Internals et de lire le chapitre qui parle des pools de mémoire du noyau. –

Questions connexes