gpt4 book ai didi

serial-port - 串行通信中的字节对齐

转载 作者:行者123 更新时间:2023-12-03 15:32:03 26 4
gpt4 key购买 nike

所以我试图为串行通信定义一个通信协议(protocol),我希望能够向设备发送 4 个字节的数字,但我不确定如何确保设备开始在正确的字节上接收它。

例如,如果我想发送

0x1234abcd 0xabcd3f56 ...

我如何确保设备不会在错误的位置开始读取并将第一个单词设为:
0xabcdabcd

有没有聪明的方法来做到这一点?我想过使用标记作为消息的开头,但是如果我想发送我选择的数字作为数据怎么办?

最佳答案

为什么不发送 start-of-message字节后跟 length-of-data字节,如果您知道数据将有多大?

或者,像其他二进制协议(protocol)一样,只发送具有固定 header 的固定大小的包。假设您只会发送 4 个字节,那么您知道在实际数据内容之前您将有一个或多个字节的 header 。

编辑:我想你误会我了。我的意思是客户端应该始终将字节视为 header 或数据,而不是基于值,而是基于流中的位置。假设您要发送四个字节的数据,那么一个字节将是标题字节。

+-+-+-+-+-+
|H|D|D|D|D|
+-+-+-+-+-+

客户端将是一个非常基本的状态机,大致如下:
int state = READ_HEADER;
int nDataBytesRead = 0;
while (true) {
byte read = readInput();
if (state == READ_HEADER) {
// process the byte as a header byte
state = READ_DATA;
nDataBytesRead = 0;
} else {
// Process the byte as incoming data
++nDataBytesRead;
if (nDataBytesRead == 4)
{
state = READ_HEADER;
}
}
}

关于这个设置的事情是,决定字节是否是头字节的不是字节的实际内容,而是流中的位置。如果您想要可变数量的数据字节,请在 header 中添加另一个字节以指示其后面的数据字节数。这样,如果您发送的值与数据流中的 header 相同,则无关紧要,因为您的客户端永远不会将其解释为数据以外的任何内容。

关于serial-port - 串行通信中的字节对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com