gpt4 book ai didi

c++ - 串口ReadFile接收重复数据

转载 作者:行者123 更新时间:2023-11-30 05:08:33 25 4
gpt4 key购买 nike

我正在开发一个多线程程序来读取和写入串行端口。如果我用 Putty 测试我的应用程序,一切都很好。但是当我用创建的 .exe 文件测试它时,它不起作用。 (我是在VS2017中启动程序,然后是.exe文件)

例如:我的输入:“测试”,另一个窗口中的输出:“Teeeeeeeeeeeeessssssssssttttttt”。

我发送数据的代码:

void SendDataToPort()
{
for (size_t i = 0; i <= strlen(line); i++) // loop through the array until
every letter has been sent
{
try
{
if (i == strlen(line)) // If ever letter has been sent
{ // end it with a new line
c = '\n'; // a new line
}
else
{
c = line[i];
}
WriteFile(serialHandle, &c, 1, &dwBytesWrite, NULL); // Send letter to serial port
}
catch (const exception&)
{
cout << "Error while writing.";
}
}
cout << endl << "Sent." << endl;
}

在数组“line”中,我有来自用户的输入。

我读取数据的代码:

int newLineCounter = 0;
unsigned char tmp;
while (!endCurrentRead)
{
ReadFile(hSerial, &tmp, 1, &bytesRead, NULL); // Get new letter

if (tmp != '\n')
{
newLineCounter = 0;
if (tmp >= 32 && tmp <= 126)
{
output += tmp; // Add current letter to the output
}
}
else
{
newLineCounter++;
if (newLineCounter < 2) // If there are more than 2 '\n' it doesn't write it down
{
output += tmp;
}
else if (newLineCounter == 2)
{
Print(output);
output = receiverName;
endCurrentRead = true;
}
}
}

之后我用 Print(output) 函数写下数据:

cout << output << endl;

我如何创建句柄文件:

serialHandle = CreateFile(LcomPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

为什么会发生这种情况,为什么只有当我使用 .exe 文件而不是 Putty 进行测试时才会发生这种情况?

最佳答案

感谢@quetzalcoatl的帮助,我得以解决问题。我必须检查 bytesRead 是否大于 0。

解决方法:

int newLineCounter = 0;
DWORD dwCommModemStatus;
unsigned char tmp;
while (!endCurrentRead)
{
ReadFile(hSerial, &tmp, 1, &bytesRead, NULL); // Get new letter
if (bytesRead > 0)
{
if (tmp != '\n')
{
newLineCounter = 0;
if (tmp >= 32 && tmp <= 126)
{
output += tmp; // Add current letter to the output
}
}
else
{
output += tmp;
Print(output);
output = receiverName;
endCurrentRead = true;
}
}
}

关于c++ - 串口ReadFile接收重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804600/

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