Windows 如何通过USB(配置为虚拟com端口)最大限度地提高数据传输速度
我很难通过OTG-USB-FS将流媒体配置为VCP。在我的配置中,我有一块nucleo-h743zi板,它似乎在向我发送数据方面做得很好,但在PC端,我在接收数据时遇到了问题Windows 如何通过USB(配置为虚拟com端口)最大限度地提高数据传输速度,windows,winapi,serial-port,usb,stm32,Windows,Winapi,Serial Port,Usb,Stm32,我很难通过OTG-USB-FS将流媒体配置为VCP。在我的配置中,我有一块nucleo-h743zi板,它似乎在向我发送数据方面做得很好,但在PC端,我在接收数据时遇到了问题 for(;;) { #define number_of_ccr 1024 unsigned int lpBuffer[number_of_ccr] = {0}; unsigned long nNumberOfBytesToRead = number_of_ccr*4; unsigned long lpNumberOfBy
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.007332970-这是一次成功的数据块传输(1024*4字节)
这是监听器代码,我打赌这不是应该怎么做的,所以我在这里寻求建议。我想也许没有控制序列(“复制”)的完整流媒体是可能的,但在这种情况下,我不能接收相邻的数据(在一个传输块内,可以,但两个连续接收的块不是相邻的)
例如:
区块1:123456
第2区:13 14 15 16 17 18
有没有办法加快我的接收速度?
(我尝试O2键但没有成功)您需要在PC端配置缓冲区,使其为从主板传输的缓冲区的2到3倍,并使用类似双缓冲区方案的方式传输数据。您在传输第二个缓冲区的同时传输第一个缓冲区,然后交替传输。 好的做法是激活缓存,并将缓冲区放在stm32h7的快速内存中(它是一个域RAM)
但是,如果你的界面与你所需的速度不匹配,就没有办法做到这一点。除了一个,如果你的控制器足够快->你可以在你的数据上实现并使用无损数据压缩,并传输压缩文件。如果你传输低熵数据,这可以给你带来速度上的实质性提升。你不需要c检查返回值,您没有任何错误处理。使用此代码您无法得出任何结论。请再努力一点。使用重载中断例程可能会导致数据意外事件问题。我建议您尝试重新考虑您的程序设计,不要大量使用中断,尤其是当您需要传输数据时瓶颈接口上的一些数据(W,谢谢!我实际上忘记了这个问题)