2011-11-23 120 views
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; 
} 
+0

您可以使用'stty'('man stty')來獲取/設置終端線路設置。通過這種方式,您可以找出要執行的操作,然後可以使用'strace'來查看如何執行並添加到代碼中。 – hochl

回答

0

只需複製你從第一tcgetattr收到的結構,並給它tcsetattr退出。