由于字节可能随时进入,缓冲传入数据至关重要。所以你应该
- 缓冲传入的数据
- 扫描缓冲区以查找完整数据
- 从缓冲区中删除使用的数据
我只是想知道您是否仍然遇到串行端口问题。如果是这样,我用 C# 开发了一种串行端口编程语言,我相信它几乎可以解决每个人遇到的所有问题。
请您看一下并尝试一下好吗?例如; 您可以像下面这样缓冲来自串行端口的传入数据并轻松执行字符串操作。
state Init
// define a global variable
our $BUFFER = "";
jump(Receive);
end state
state Receive
recv();
$len = length($DATA_PACKET);
if("$len > 0") {
$BUFFER += $DATA_PACKET;
call(Parser);
}
end state
state Parser
// check if buffer matchs regular expression pattern
if(match($BUFFER, "(?<WILLDELETE>.*?<STX>(?<DATA>.*?)<ETX>(?<CHECKSUM>[0-9A-F]{2}))")) {
// Received complete data
$lenData = length($WILLDELETE);
$BUFFER = remove($BUFFER, 0, $lenData);
// Do operations with the other parsed fields. $DATA and $CHECKSUM in this example.
}
end state
该项目在 sourceforge 上免费提供,如果您有任何问题,请随时提问。
项目主页
下载链接