1

我对提出问题有点害羞,因为它们已被否决,但这让我发疯。我可以从所有串行端口事件处理程序问题中看到,这是一个流行的主题。经过一番努力,我得到了以下代码:

   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 标志如何破坏事件处理程序?

4

0 回答 0