При использовании Android я теряю данные на входящем потоке данных USB, который я не теряю при чтении одного и того же устройства/потока в Windows. (Я знаю, что Android не является операционной системой в режиме реального времени, но ни одна из них не является Windows, а Windows не имеет проблем с "поддержанием" данных).
У меня есть данные со скоростью около 3,5 МБ/с с использованием чипа FTDI 2232H, который имеет встроенный буфер 4 КБ. Вызов bulk_transfer в libusb может запрашивать 16K за раз, поэтому Android должен получать содержимое USB-буфера каждые 4 месяца или около того.
Я пробовал: писать на Java и в C, повышая приоритет потока (и/или обрабатывать) до него, выполнять синхронизацию и асинхронные подпрограммы, и даже передавать отдельный буфер для каждого USB-чтения, поэтому я даже не необходимо скопировать данные между последовательными чтениями. (Во время передачи не происходит сбор мусора). Мне нужно только буферизировать 20 МБ данных, поэтому все это в ОЗУ.
Тем не менее, Android не "обходит" данные USB, иногда дожидается до 12 мс между чтением, в результате чего теряется куча данных.
Есть ли у кого-нибудь идеи? DMA? Какой-то запрос "в реальном времени" к ядру?