我对提出问题有点害羞,因为它们已被否决,但这让我发疯。我可以从所有串行端口事件处理程序问题中看到,这是一个流行的主题。经过一番努力,我得到了以下代码:
public void serialEvent(SerialPortEvent evt) {
if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
rdata = (byte) comIn.read();
line_buffer[line_ptr++] = rdata;
data_available = true;
// System.out.print((byte)rdata);
if( rdata == '\n') {
line_available = true;
}
}
catch (Exception e) {
System.out.print("Failed to read data. (" + e.toString() );
}
}
}
我说它正在工作,因为如果我取消注释打印,我会看到我期望的数据。我还在设置 data_available 和行可用标志的行上设置了断点,并且它们发生了。
我正在尝试使用以下代码与此代码进行通信:
// Code that requests data to be send back
// Code that inserts a delay for data to be received
while( comm.line_avaiable() == false ) { }
for(int j=0;j< comm.line_ptr; j++) {
System.out.print( (char)comm.line_buffer[j] );
}
这段代码是等待data_available,然后打印接收到的数据行。使用所示代码,while 循环永远不会获取 data_available。不仅如此,事件处理程序不会得到任何事件。没有数据被回显(注释被删除)并且断点永远不会被击中。
如果我注释掉等待 data_available 的 while 循环(并添加延迟以接收数据,因为我们在没有握手的情况下运行,数据接收得很好。如果设置事件处理程序确实会遇到断点并且可以回显数据.
轮询 line_available 标志如何破坏事件处理程序?