1
我試圖通過一個串行端口與一個控制機械門的PLC進行通信,以實現業界的任務。由於對這個主題並不是非常有經驗並且很着急,所以我沒有意識到存儲舊設置並將它們恢復到程序退出的重要性。在更改termios結構中的某些字段後,即使在使用完全相同的端口函數打開後,我也不再能夠從端口讀取任何內容,而我使用的端口函數與其他端口(ttyD0)完全相同,可以很好地適用於這些設置。任何建議如何我可以恢復ttyD1回到工作狀態?在linux中恢復串口
用於打開端口的代碼如下:
int OpenPort()
{
fd = open("/dev/ttyD0", O_RDWR | O_NOCTTY);
if (fd < 0)
{
cerr << "open error " << errno << strerror(errno) << endl;
}
else
{
struct termios my_termios;
fcntl(fd, F_SETFL, 0);
tcgetattr(fd, &my_termios);
//bzero(&my_termios, sizeof(my_termios));
tcflush(fd, TCIFLUSH);
my_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL | HUPCL;
//my_termios.c_lflag = ICANON;
//cfsetospeed(&my_termios, B115200);
tcsetattr(fd, TCSANOW, &my_termios);
}
return fd;
}
您可以使用'stty'('man stty')來獲取/設置終端線路設置。通過這種方式,您可以找出要執行的操作,然後可以使用'strace'來查看如何執行並添加到代碼中。 – hochl