У меня проблемы с настройкой потоковой передачи через OTG-USB-FS, настроенный как VCP. В моем распоряжении есть плата nucleo-h743zi, которая неплохо справляется с отправкой мне данных, но на стороне ПК у меня проблема с получением этих данных.
for(;;) {
#define number_of_ccr 1024
unsigned int lpBuffer[number_of_ccr] = {0};
unsigned long nNumberOfBytesToRead = number_of_ccr*4;
unsigned long lpNumberOfBytesRead;
QueryPerformanceCounter(&startCounter);
ReadFile(
hSerial,
lpBuffer,
nNumberOfBytesToRead,
&lpNumberOfBytesRead,
NULL
);
if(!strcmp(lpBuffer, "end\r\n")) {
CloseHandle(FileHandle);
fprintf(stderr, "end flag was received\n");
break;
}
else if(lpNumberOfBytesRead > 0) {
// NOTE(): succeed
QueryPerformanceCounter(&endCounter);
time = Win32GetSecondsElapsed(startCounter, endCounter);
char *copyString = "copy";
WriteFile(hSerial, copyString , strlen(copyString), &bytes_written, NULL);
DWORD BytesWritten;
// write data to file
WriteFile(FileHandle, lpBuffer, nNumberOfBytesToRead, &BytesWritten, 0);
}
}
QPC показывает, что скорость была 0,00733297970 - это один раз для одной успешной передачи блока данных (1024 * 4 байта).
это код Слушателя, держу пари, что это не так, как должно быть, поэтому я здесь, чтобы искать советы. Я прыгал, что, возможно, возможна полная потоковая передача без управляющих последовательностей («копирование»), но в этом случае я не могу получить соседние данные (в пределах одного блока передачи это нормально, но два последовательных полученных блока не соседствуют.
Пример:
block_1: 1 2 3 4 5 6
блок_2: 13 14 15 16 17 18
Есть ли способ ускорить мой прием?
(Я безуспешно пробовал ключ O2)