C 如何使USB转串行适配器速度更快,读取文件的执行时间过长

C 如何使USB转串行适配器速度更快,读取文件的执行时间过长,c,windows,winapi,arduino,uart,C,Windows,Winapi,Arduino,Uart,我试着每1ms和Arduino通话一次。Arduino在发送命令方面做得很好,但我的电脑不会每1ms读取一次数据。通常需要3-4毫秒,到那时我的Arduino已经发送了一系列数据 我试着使用EV\u RXCHAR或EV\u CTS,但同样,Windows响应命令的时间太长 t = clock(); ReadFile(hComm, &s, sizeof(s), &NoBytesRead, NULL); t = clock() - t; double time_taken = ((d

我试着每1ms和Arduino通话一次。Arduino在发送命令方面做得很好,但我的电脑不会每1ms读取一次数据。通常需要3-4毫秒,到那时我的Arduino已经发送了一系列数据

我试着使用
EV\u RXCHAR
EV\u CTS
,但同样,Windows响应命令的时间太长

t = clock();
ReadFile(hComm, &s, sizeof(s), &NoBytesRead, NULL);
t = clock() - t;
double time_taken = ((double)t)/CLOCKS_PER_SEC; // in seconds usualy 0.003 
我不确定问题是出在Windows驱动程序还是USB到UART ch340芯片上


也许你可以向我推荐其他以1ms间隔进行通信的方法?

仅供将来参考。 “问题”在于USB 1.1轮询率。 最大USB 1.1轮询速率为1000Hz,因此ch340(arduino的芯片)无法实现低于1ms的延迟。。。
USB 2.0可能会工作,因为8khz的轮询率。

仅供将来参考。 “问题”在于USB 1.1轮询率。 最大USB 1.1轮询速率为1000Hz,因此ch340(arduino的芯片)无法实现低于1ms的延迟。。。
USB 2.0可能会工作,因为轮询速率为8khz。

为什么不尽快读取数据?通常,您需要设置通信速率(例如波特率)?正在发送多少数据(字节)?windows不是实时操作系统。因此,它无法在消息之间保持1ms的间隔。(正如您所发现的)即使如此,为了最大限度地延长处理消息的可用时间,需要对消息进行“双缓冲”,以便在接收新消息时处理先前的消息。一个重要的考虑因素是:每条消息中接收到多少数据?波特率是多少?注意:9600波特每字符大约需要1毫秒波特设置为2比特我每1毫秒打磨8字节。我知道windows不是实时的好选择,但我想用matlab/simulink实现这一点。另外,我使用usb到串行适配器,thas增加了延迟。嗯,我现在卡住了,也许我会在linux上用MB上的真实com端口试试。为什么不尽可能快地读取数据呢?一般来说,你需要设置什么是通信速率(例如,波特率是多少)?正在发送多少数据(字节)?windows不是实时操作系统。因此,它无法在消息之间保持1ms的间隔。(正如您所发现的)即使如此,为了最大限度地延长处理消息的可用时间,需要对消息进行“双缓冲”,以便在接收新消息时处理先前的消息。一个重要的考虑因素是:每条消息中接收到多少数据?波特率是多少?注意:9600波特每字符大约需要1毫秒波特设置为2比特我每1毫秒打磨8字节。我知道windows不是实时的好选择,但我想用matlab/simulink实现这一点。另外,我使用usb到串行适配器,thas增加了延迟。好吧,我现在被卡住了,也许我会在linux上用真正的com端口在MB上试试。