C++ ReadFile USB串行端口太慢
我需要保存来自GPS的数据。我使用Windows7系统,GPS通过USB端口连接。我使用的是基于visualstudio对话框的应用程序 GPS数据是这样的C++ ReadFile USB串行端口太慢,c++,visual-studio,serial-port,C++,Visual Studio,Serial Port,我需要保存来自GPS的数据。我使用Windows7系统,GPS通过USB端口连接。我使用的是基于visualstudio对话框的应用程序 GPS数据是这样的 "$GPGLL,2219.2500182,N,09019.0118688,E,055547.65,A,A*61" 我需要将这些数据保存在文件中。我已经彻底检查并相应地设置了参数 char buffer[56]; 这是我打开端口的代码 hcomm= CreateFile("COM8",
"$GPGLL,2219.2500182,N,09019.0118688,E,055547.65,A,A*61"
我需要将这些数据保存在文件中。我已经彻底检查并相应地设置了参数
char buffer[56];
这是我打开端口的代码
hcomm= CreateFile("COM8",
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hcomm == INVALID_HANDLE_VALUE)
TRACE("%s","error");
memset(&port, 0, sizeof(port));
port.DCBlength = sizeof(port);
if ( !GetCommState(hcomm, &port))
TRACE("getting comm state");
if (!BuildCommDCB("baud=19200", &port))
TRACE("building comm DCB");
if (!SetCommState(hcomm, &port))
TRACE("adjusting port settings");
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
if (!SetCommTimeouts(hcomm, &timeouts))
TRACE("setting port time-outs.");
我正在读取如下数据
while(loop which executes after every 20 ms) {
ReadFile(hcomm, buffer, sizeof(buffer), &read, NULL);
if ( read ){
//code to write data to file
}
虽然我接收数据,但速度非常低。我以10赫兹的频率接收数据。我想以每秒50个读数的速度保存数据
有人能帮我吗
编辑:
根据@Paul R的建议,我将波特率提高到115200。现在,它以每秒20条消息的速度保存数据。我的GPS支持20 Hz的最大更新速率和115200的最大波特率。如果我想以每秒50条消息的速度保存数据,我需要做什么
例如,如果更新率为20 Hz,则每次读取的时间为50 ms。因此,如果每20 ms读取一次端口,它是否应该将每个条目保存两次或以适当的比例保存?这只是基本的算法。在19200 bps时,每秒可以接收大约1920个字符(假设每个字符=8个数据位+1个起始位+1个停止位)。您上面的示例消息大约是55个字符+行终止符等,这意味着最好的情况是每秒超过30条消息。如果您必须在收到的每一条消息之间向设备发送一条消息,则该消息将更低。因此,在这种数据速率下,每秒50条消息根本不可能
简单的解决方案:将数据速率从19200 bps提高到更高的速率,例如57600 bps。阅读的“更新速率”部分。@HansPassant,请参阅问题中的编辑部分如果GPS的更新速率为20Hz,则为每秒20次,这意味着即使你每秒能读50条信息,你也不会收到50条唯一的信息。试图阅读更多的信息只是浪费资源。哦..谢谢你指出错误。我增加了GPS和in代码的波特率。它现在每秒可以保存@20条消息。GPS的更新率最高为20 Hz。这是否导致了现在的问题?