Lors de l'utilisation d'Android, je suis à la perte de données sur une entrée d'USB de flux de données que je ne perds pas lors de la lecture du même appareil/stream dans Windows. (Je sais que Android n'est pas un système d'exploitation temps réel, mais ce n'est Windows, et Windows est ne pas avoir de problème de "keeping up" avec les données.)
J'ai des données à environ 3,5 MO/sec à l'aide d'un FTDI 2232H puce qui a un construit en 4K de mémoire tampon. Le bulk_transfer appels en libusb pouvez demander de 16K à un moment, Android doit retirer le contenu de la clé de tampon toutes les 4 ms ou plus.
J'ai essayé: écrit en Java et en C, en augmentant le fil (et/ou processus), la priorité la plus élevée, de synchronisation et de async routines, et j'ai même passer distincte de la mémoire tampon pour chaque USB lire donc je n'ai même pas à copier des données entre des lectures successives. (Il n'y a pas de collecte des ordures pendant le transfert). J'ai seulement besoin de tampon de 20 mo de données, il est donc tout à la RAM.
Encore, Android est "de ne pas se déplacer" à l'USB de données, parfois, attendre aussi longtemps que 12ms entre les lectures, provoquant un tas de perte de données.
Quelqu'un aurait-il des idées? DMA? Une sorte de "temps réel" demande au noyau?