Я занимаюсь разработкой об ультразвуковом зонде на стороне Linux. Я хочу захватить необработанные данные с ультразвукового зонда. Я программирую с помощью C и используя libusb API.Получение необработанных данных с помощью libusb
В устройстве имеются две конечные точки BULK IN (2 и 6). Устройство отправляет 2048 байт данных, но отправляет данные в виде 512 байт с четырьмя блоками.
Эта картина потока данных на стороне Windows, и я хочу, чтобы скопировать, что в сторону Linux. Вы видите четыре блока данных с конечной точкой 02 и после этого четыре блока данных с конечной точкой 06.
Но есть проблема с выбором времени. Первый блок данных конечной точки 02 и первый блок данных конечной точки 06 находятся близко друг к другу по времени. Но в потоке данных они не находятся в последовательности.
Я вижу, что компьютер считывает первые блоки данных конечной точки 02 и 06. После этого компьютер считывает три других блока данных конечной точки 02 и конечной точки 06. Но в USB-анализаторе поток данных просматривается в соответствии с номером конечной точки. Последовательность отличается по времени.
На стороне Linux, я пишу такой код:
int index = 0;
imageBuffer2 = (unsigned char *) malloc(2048);
imageBuffer6 = (unsigned char *) malloc(2048);
while (1) {
libusb_bulk_transfer(devh, BULK_EP_2, imageBuffer2, 2048, &actual2, 0);
libusb_bulk_transfer(devh, BULK_EP_6, imageBuffer6, 2048, &actual6, 0);
//Delay
for(index = 0; index <= 10000000; index ++)
{
}
}
Так что результат на картинке ниже
Другими словами, в моем коде все чтение данных считывается последовательно в соответствии со временем и номером конечной точки. Мой результат отличается от потока данных на стороне Windows.
Вкратце, у меня есть две конечные точки BULK IN, и они начинают считывать данные в соответствии с временем. Как это возможно?
Кстати, есть более эффективные способы задержать ваши петли: человек 3 nanosleep – asamarin
на самом деле сон() или nanosleep() - лучший вариант задержки; цикл, который ничего не выполняет, может быть оптимизирован компилятором – Pandrei
, попробуйте добавить nanosleep() для задержки и посмотреть, решит ли это вашу проблему. возможно, вы читаете быстрее, чем доступны данные. – Pandrei