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

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

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

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

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

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

34
задан DIF 23 February 2012 в 08:55
поделиться