C 串行端口没有响应

C 串行端口没有响应,c,serial-port,C,Serial Port,我写了一个与串口通信的程序,使用termios,这个程序将以非阻塞模式读取串口,并在读取数据后将响应写入串口。如果没有从串行端口读取数据,程序将执行其他操作,在下一个循环中,程序将再次读取串行端口 现在的问题是,在有时消失后,也许几分钟,或者几个小时,串行端口不再响应我的程序。即使我执行echo'HB\n'>/dev/ttyUSB0(那么串口应该响应'HACK'),它也不再响应 我甚至不知道串口什么时候“死了”,我没有任何线索。。它“死”了 以下是我的配置: /// set local mode

我写了一个与串口通信的程序,使用termios,这个程序将以非阻塞模式读取串口,并在读取数据后将响应写入串口。如果没有从串行端口读取数据,程序将执行其他操作,在下一个循环中,程序将再次读取串行端口

现在的问题是,在有时消失后,也许几分钟,或者几个小时,串行端口不再响应我的程序。即使我执行echo'HB\n'>/dev/ttyUSB0(那么串口应该响应'HACK'),它也不再响应

我甚至不知道串口什么时候“死了”,我没有任何线索。。它“死”了

以下是我的配置:

/// set local mode options 
//tminfo.c_lflag |= ICANON;                                                                       
tminfo.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);                                             

/// set control mode options                                                                   
tminfo.c_cflag |= (CLOCAL | CREAD);                                                               
tminfo.c_cflag |= HUPCL; 

// set hardware flow control 
tminfo.c_cflag &= ~CRTSCTS;       

// set how many bits in a character                                                               
tminfo.c_cflag &= ~CSIZE;
tminfo.c_cflag |= CS8;      

// set parity mode (default to odd validation), this option (PARENB) will both enable input and output parity checking
tminfo.c_cflag &= ~PARENB; // we don't need prity checking now                                                                                                                                 

/// set input mode options  
// set input parity checking
tminfo.c_iflag &= ~INPCK; 
tminfo.c_cflag &= ~CSTOPB;                                                                                                                                                                

/// set output mode options                                                                                                                      
tminfo.c_oflag &= ~OPOST;                                                                


tminfo.c_cc[VMIN] = 1; 
tminfo.c_cc[VTIME] = 1;                                                                  

/// set line speed, defaults to 38400bps, both for input and output                           
// this call will set both input and output speed                                                 
cfsetspeed(&tminfo, B38400);
在这种情况下很难调试串行文件。我真的搞不清楚到底是什么原因导致串行端口“死”在地球上。我几乎疯了

可能的原因是什么?任何帮助都将不胜感激

更新:
我已经在串口的另一端编写了一些代码,当它接收到“HB”时,它会响应“HACK”

当串行通信出错时,如果没有正确的设备,问题通常很难调试。在调试无效之前,您应该确保是您的代码出错:使用
屏幕
minicom
或甚至只使用`stdbuf-I0 hextdump/dev/ttyS0(或任何串行端口)查看串行端口,并确保正确接收数据。如果这样做有效的话,很可能是代码中的某些内容。但是我们需要看到它的其余部分。@Alexios感谢重播,当我的程序无法从串行端口读取数据时,我会打开两个终端,一个执行
cat/dev/ttyUSB0
,另一个重复执行
echo'HB\n'>/dev/ttyUSB0
,但
cat/dev/ttyUSB0
也不打印任何内容。。PS:我已经在串口的另一端写了一些代码,当它收到“HB”时,它会响应“HACK”@Alexios那么,我的程序似乎导致了整个系统范围内的串口“死机”?但这怎么可能呢?我已经搜索了将近一周,但仍然没有找到任何想法…编程问题在这里是离题的,请继续提问。你需要提供更多的信息。包括再现问题的完整程序。