ฉันกำลังทำงานเพื่อการสื่อสารแบบอนุกรมโดยใช้ C ++ ฉันกำลังเรียกคำสั่ง linux ด้วย C ++ พอร์ตหนึ่งที่ฉันใช้ทำงานเป็นเครื่องส่งและอีกส่วนหนึ่งทำงานเป็นเครื่องรับ
นี่คือวิธีการทำงานของเครื่องส่งสัญญาณ
#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
...
บางอย่างเช่นนี้ ฉันสมมติว่านี่เป็นปัญหากับบัฟเฟอร์ในพอร์ตอนุกรม ยิ่งกว่านั้น ตัวรับ กำลังแสดงข้อความจากบัฟเฟอร์เก่าซึ่งไม่ได้เริ่มต้นด้วยซ้ำ! มีวิธีแก้ไขตามที่ฉันตั้งใจไว้หรือไม่?