Android - потеря входящей (высокоскоростной) USB-данных

При использовании Android я теряю данные на входящем потоке данных USB, которые не теряю при чтении того же устройства / потока в Windows. (Я знаю, что Android - это не ОС реального времени, но и Windows, и у Windows нет проблем с тем, чтобы не отставать от данных.)

У меня есть данные, поступающие со скоростью около 3,5 МБ / с с использованием чипа FTDI 2232H, который имеет встроенный буфер 4K. Вызовы bulk_transfer в libusb могут запрашивать 16 Кбайт за раз, поэтому Android должен собирать содержимое буфера USB каждые 4 мс или около того.

Я пробовал: писать на Java и C, повышать приоритет потока (и / или процесса) до самого высокого уровня, выполнять синхронизацию и асинхронность, и я даже передаю отдельный буфер для каждого чтения USB, поэтому мне даже не нужно копировать данные между последовательными чтениями. (Во время передачи не происходит сборка мусора.) Мне нужно только буферизовать 20 МБ данных, так что все это в ОЗУ.

Тем не менее, Android не «обходит» данные USB, иногда ожидая 12 мс между чтениями, что приводит к потере множества данных.

У кого-нибудь есть какие-либо идеи? DMA? Какой-то запрос в реальном времени к ядру?

Ответы на вопрос(1)

Ваш ответ на вопрос