Я читаю данные реального времени по USB, но данные буферизуются. Как я останавливаю буферизацию?
Linux
Используйте udev, чтобы изменить latency_timer.
В ubuntu создайте правило в /etc/udev/rules.d
для вашего устройства. Например, 99-xsens.rules
Создайте в этом файле правило, соответствующее вашему устройству, и установите latency_timer. Например, для моего устройства это:
KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb-serial", DRIVERS=="ftdi_sio", ATTR{device/latency_timer}="2"
Это заставляет устройство ждать более короткое время, прежде чем решить, что больше нет входящих данных для буферизации. В этом случае мое устройство перешло с ожидания 16 мс на ожидание 2 мс.
Используйте udevadm info -a -n / dev / ttyUSB0
, например, чтобы узнать, какие пары ключ-значение должны соответствовать в вашем правиле. Есть некоторые хитрые вещи, о которых следует помнить, но найти ресурсы, которые помогут с тонкостями, было легко, когда я научился использовать правила udev.
Вот хорошая справочная страница по написанию правил udev . Он старый, и синтаксис инструментов udev изменился, но концепции все еще актуальны.
Windows
В Windows вы используете Диспетчер устройств-> Порты-> COM-порт-> Настройки порта-> Дополнительно-> Таймер задержки
.