使用 C++ 进行串行通信时的缓冲区问题
我正在使用 C++ 进行串行通信。我正在用 C++ 调用 linux 命令。我使用的一个端口用作发射器,另一部分用作接收器。
这就是发送器的工作原理,
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <fstream>
using namespace std;
ofstream wfile;
char byte[40];
int n=0;
int main()
{
while(true)
{
wfile.open("/dev/ttyUSB1");
sprintf(byte,"message : %d\n",n);
wfile << byte;
wfile.close();
printf("%s",byte);
n++;
sleep(1);
}
}
在终端窗口中,我看到的结果是
message : 0
message : 1
message : 2
message : 3
message : 4
message : 5
message : 6
message : 7
message : 8
message : 9
在接收器部分,我的 C++ 脚本是这样编写的,因为
#include <stdio.h>
#include <stdlib.h>
int main()
{
char var[100];
FILE *fp;
while(true)
{
fp=popen("cat /dev/ttyUSB0","r");
fgets(var,sizeof(var),fp);
printf("%s",var);
pclose(fp);
}
return 0;
}
我期望在接收器端的终端窗口得到相同的结果。
结果
message : 1
1
1
1
1
1
1
1
1
... (repeats about 100 time)
1
1
1
message : 2
...(void for about 100 line)
message : 3
...
message : 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
...
我看到类似这样的 。我假设这是串行端口缓冲区的问题。此外,接收器正在显示来自甚至尚未初始化的旧缓冲区的消息!有什么办法可以按照我的意愿解决这个问题吗?
I am working on for serial communication using C++. I am calling linux command with C++. One port I am using works as transmitter and the other part is working as a receiver.
This is how transmitter works,
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <fstream>
using namespace std;
ofstream wfile;
char byte[40];
int n=0;
int main()
{
while(true)
{
wfile.open("/dev/ttyUSB1");
sprintf(byte,"message : %d\n",n);
wfile << byte;
wfile.close();
printf("%s",byte);
n++;
sleep(1);
}
}
And in the terminal window, I see result as
message : 0
message : 1
message : 2
message : 3
message : 4
message : 5
message : 6
message : 7
message : 8
message : 9
In the receiver part, my C++ script is written as
#include <stdio.h>
#include <stdlib.h>
int main()
{
char var[100];
FILE *fp;
while(true)
{
fp=popen("cat /dev/ttyUSB0","r");
fgets(var,sizeof(var),fp);
printf("%s",var);
pclose(fp);
}
return 0;
}
I am expecting to get same result at the terminal window of my receiver's side.
I see a result something like
message : 1
1
1
1
1
1
1
1
1
... (repeats about 100 time)
1
1
1
message : 2
...(void for about 100 line)
message : 3
...
message : 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
...
Something like this. I am assuming this is a problem with the buffer in the serial port. Moreover, Receiver is showing messages from old buffers which is not even initialized! Is there any way to fix this as I intended?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
需要修复的问题
检查
fgets()
的返回值根据需要进行简化。
GTG
Things to fix
Check return value of
fgets()
Simplify as desired.
GTG