gpt4 book ai didi

无法在 windows.h 中使用 Windows 串行正确读取数据字符串

转载 作者:行者123 更新时间:2023-11-30 16:02:51 25 4
gpt4 key购买 nike

我有一个微 Controller 连接到我的 USB 端口,我正在使用下面的代码读取它`

#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main (void)
{

int n = 25;
char szBuff[25 + 1] = {0};

HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts={0};
DWORD dwBytesRead =25;

dcbSerialParams.DCBlength=sizeof(DCB);

hSerial = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);


if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
puts ("cannot open port!");
return;
}

puts ("invalid handle value!");
return;
}

if (!GetCommState(hSerial, &dcbSerialParams))
{
puts ("error getting state");
return;
}

dcbSerialParams.BaudRate=CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;

if(!SetCommState(hSerial, &dcbSerialParams))
{
puts ("error setting port state");
return;
}

timeouts.ReadIntervalTimeout = 30;
timeouts.ReadTotalTimeoutMultiplier = 100;
timeouts.ReadTotalTimeoutConstant = 100;

if (!SetCommTimeouts(hSerial, &timeouts))
{
puts ("timeouts setting fail!");
}

while (1){
if(!ReadFile(hSerial, szBuff, n, &dwBytesRead, NULL)){
puts ("serial read error fail!");
return;
}

else
{
printf ("%s\n" , szBuff);
}
}


getch();
return 0;

}
`

我按以下格式发送数据:$A.B.C$ 后跟换行符。那么它是 7(或 8,包括换行符)字节,对吗?我将 readfile 的第三个参数设置为 20,大于 7 个字节,以便我可以成功读取所有数据字符串。然而阅读有时会漏掉一些字符。我没有读取 $A.B.C$,而是在一行 $A.B.C 中读取了 $A.B.C,并在该 $ 之后的行中读取了 $(隐藏的'\n')。我该如何解决这个问题?

最佳答案

这是正常的。当接收缓冲区至少包含一个字节时,您将返回缓冲区中的所有内容。这通常只是您期望的一小部分,串行端口非常慢。您必须继续阅读,直到获得完整答复。

关于无法在 windows.h 中使用 Windows 串行正确读取数据字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com