Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何通过USB(配置为虚拟com端口)最大限度地提高数据传输速度_Windows_Winapi_Serial Port_Usb_Stm32 - Fatal编程技术网

Windows 如何通过USB(配置为虚拟com端口)最大限度地提高数据传输速度

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

我很难通过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 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,谢谢!我实际上忘记了这个问题)