Question

Je pourrais avoir des idées fausses ici, donc garder avec moi.

J'ai écrit un programme qui capture des images d'une caméra. Je partage la mémoire entre l'appareil photo et mon application avec mmap comme je l'ai trouvé dans le documentation V4L2 . Cela fonctionne très bien. Maintenant, mon processeur (c'est le DM3730 de TI) dispose également d'un DSP. Je veux utiliser le DSP, mais il faut physique mémoire contiguë. TI fournit des pilotes d'allouer la mémoire. Mon problème est que je perds en ce moment beaucoup de temps pour copier la mémoire MMAP dans la mémoire contiguë physique. Est-il possible de dire mmap qu'il ne devrait pas allouer de la mémoire elle-même, mais que je dis mmap d'utiliser la mémoire que j'allouer.

Pour vous donner une idée de ce que je fais (. Il y a beaucoup de code manquant bien sûr, mais je coincé très proche de la documentation v4l2 J'espère que cela suffit pour comprendre mon problème):

//reserve physical contiguous memory
dsp_buffer      = Memory_alloc(buffer_length, &myParams); 

...
//reserve memory for buffer, but not contiguous
buffers[n_buffers].start =
     mmap (NULL ,                    /* start anywhere */
     buf.length,
     PROT_READ | PROT_WRITE ,  /* required */                               
     MAP_SHARED ,              /* recommended */
     fd, buf.m.offset);

Après que je copie la mémoire de la mémoire non contiguës dans la mémoire contiguë, chaque fois qu'un cadre est prêt.

...
//wait until frame is ready in memory
r = select (fd + 1, &fds, NULL, NULL, &tv); 
...
//copy the memory over to the physically contiguous memory
memcpy(dsp_buffer,buffers[buf.index].start,size); 
...

Comment pourrais-je obtenir les images dans la mémoire physique contiguë tout de suite?

Était-ce utile?

La solution

Si vous ne pouvez pas passer le résultat de Memory_alloc() comme premier argument à votre mmap() (par exemple, si elle utilise également mmap () qui rendrait impossible la carte de cette mémoire à nouveau), vous devriez probablement utiliser un autre E / S en continu procédé de l'exemple donné - variation de IO_METHOD_USERPTR. Il utilise le même ioctl que IO_METHOD_MMAP aux cadres de capture et devrait fournir l'efficacité similaire.

Autres conseils

Vous auriez besoin d'un soutien de pilote à partir du pilote de l'appareil. mmap obtient les pages physiques mappe de ce pilote, il cartographie de - la caméra dans ce cas. Vous ne pouvez pas dire mmap d'utiliser des pages pré-alloué, car le pilote sous-jacent devrait être dit d'utiliser ces pages pré-attribuées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top