问题描述 投票:0回答:1

有时它正确地读取了11个字节数据,但是大多数情况下它显示未收到数据。收到的数据长度保持在变化上。

我想,我的评论实际上应该是一个答案,所以我们去:
这里有几件事要解决,我将一一仔细研究它们。

serial I/o不是基于消息的

它是基于流的。也就是说:您阅读的是字节流。
这意味着您无法期望根据某些应用程序特定的协议读取完整的消息。

您需要确保通过将其明确编码到协议来确保您获得完整的消息。 通常,这是通过阅读到累积的缓冲区中完成的,直到检测到一条(或更多)完整消息。如果是这样的话,将在清洁缓冲区时裁剪并传递该消息(虽然不是太多),然后再返回阅读。

结构长度与可变长度消息字段
c# python-3.x raspberry-pi serial-port
1个回答
0
投票
如果消息中的字段可以具有可变数量的字节,则可以通过几种不同的方式处理:

如果差异很小(像几个字节一样),则可以将数据“对齐”协议中指定的最长可能值。

如果变化明显足够大,您可能需要具有将可变长度长度长度的第二个字段或引入子数量的次数。

temimiter字节 您使用的是“ $”和“#”。这并不是天生的错误,但是我想让您意识到ASCII中的eardeMessagetexiter(该消息已扩展到Unicode,也扩展到ISO-8859-1)。如果您正在编写该协议,则可以利用这些协议,而无需放弃“ $”和“#”字符作为内容。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.