2

我在 vb.net 中创建了一个应用程序,它通过串行端口连续发送和接收数据。我用一些所需的自定义参数形成一个框架,例如帧号、帧长度、实际字符串。它们由特殊字符分隔,如'@'、'#'、'$' 等。例如@#3$21%Hello.There!!&

我必须在两个连续帧之间至少有 1 毫秒的间隔来测试它。我面临的问题是,当我在环回测试中接收数据时,通常会丢失一些字符。它被算作一个损坏的框架,但我无法理解为什么它会出现在 Windows 的环回测试中。这个框架看起来像,@#3$21Hello.The!!&。接收函数是这样的。

Private Sub DataReceivedHandler(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles RXCOMPort.DataReceived

        If e.EventType = SerialData.Chars Then
            If checkFlag = False Then
                '---receive data 
                str &= RXCOMPort.ReadExisting()
                checkFlag = True ' for the thread of processing received data
            End If
        End If
End Sub

稍后将有一些基于微控制器的硬件,它们将从 UART 接收和发送数据到 UART。

4

1 回答 1

0
 If checkFlag = False Then
            '---receive data 
            str &= RXCOMPort.ReadExisting()
            checkFlag = True ' for the thread of processing received data
        End If

如果在您在其他处理函数中设置 checkFlag 之前执行您的 Handler 会发生什么?

例如,第一个 Handler 回调收集@#3$21%Hello。

然后你去处理。如果在处理函数完成第一批数据之前执行 Handler 会发生什么?新的串口数据会掉吗?

通常,您希望将接收到的数据放入循环缓冲区。在接收处理程序中执行此操作,并且仅执行此操作。

在另一个函数或线程中对循环缓冲区进行处理。这样,处理程序的工作就是只将数据放入循环缓冲区中,您不会丢弃数据。

于 2014-12-07T05:12:43.430 回答