gpt4 book ai didi

c++ - 读取 2 个 radio 、串行通信之间发送的信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:44 25 4
gpt4 key购买 nike

我目前正在通过我电脑上的 com 端口从接收器读取数据,读取其他 2 个 radio 之间发送的信号。我遇到的问题是它如何正确显示到列表框,因为它不是从顶部开始的,它在输出上方放置了很多空行,迫使我向下滚动才能看到它,而且我的循环表现得很奇怪.这是代码:

void Cserial_NewDlg::OnBnClickedButton1()
{
CString tempStr;
bool bReading = true;
//memset(&port, 0, sizeof(port));
//memset(buffer,0,BUFFER_SIZE);
while(bReading) {
ReadFile(file,&buffer[0],BUFFER_SIZE,&bytesRead,NULL); //reading opened port
if(bytesRead == 0)
break;
tempStr = buffer;
int Pos = tempStr.Find("TX",0); //finding the start of each transmission
if(Pos > 0){/*memcpy*/}
else {
memmove(processBuffer,&buffer[Pos],PROCESS_SIZE); //copying buffer to a new buffer of correct size
m_ListBox.AddString(processBuffer); //displaying
}
/*if(bytesRead == PROCESS_SIZE)
bReading = false;*/
}
}

第一次按下“读取”按钮时读取正常,但我遇到了一个问题,processBuffer(29 字节,因为这是传输的长度)没有从以前的缓冲区重新复制数据(64 字节,允许一些溢出)在第一次循环之后,所以它迫使我再次按下读取按钮,这不是我想要的,我无法发现问题,有什么想法吗?

最佳答案

列表中的 Pos > 0 分支是一个死分支,但这是一个问题,因为只有当“TX”在最开头或根本找不到时,您的 else 才会执行。如果您读取了您的缓冲区,但没有出现“TX”,则您有一个缓冲区读取错误,从缓冲区的索引 -1 开始。

基本上,假设您有一个简短的阅读并没有返回完整的消息,或者说您只是有一个格式错误的消息,其中不包含您正在寻找的这个“TX”键 - CString::查找函数返回-1,表示“未找到”。在这些情况下,您必须继续阅读(也许在那里睡一觉?),直到在添加消息之前找到消息的结尾。这将防止多次按下按钮。

我鼓励您详细说明您期望的消息是什么样的 - 这将有助于我提供更有针对性的建议。

关于c++ - 读取 2 个 radio 、串行通信之间发送的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6748079/

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