gpt4 book ai didi

java - Arduino和Java之间的校验和函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:00 25 4
gpt4 key购买 nike

我正在实现一个串行协议(protocol),用于从 Arduino 到 Java 的通信(单向)。

我从 Arduino 发送的每一帧看起来都是这样的:

"G FF FF FFFF FFFF FFFF FFFF T" (The spaces are not part of the frame)
  • G表示一帧开始,唯一可能的值是G
  • F 是编码为十六进制值的有效负载。可能的值:[0-F]
  • T 是校验和。可能的值:[H-Z]

为了计算校验和,我为 Arduino 和 Java 编写了一个函数。但是,当我在 Java 端接收到这些函数时,我会得到大约 50% 的损坏帧。

我认为问题与 Java 变量不能无符号这一事实有关。你能发现错误吗?还是简单的串行连接可能会破坏我发送的 50% 的帧? FRAME_LENGTH_WITHOUT_CRC 为 21。

Java代码:

char checksum(byte[] frame) {
short sum = 0;
for (short i = 0; i < Config.FRAME_LENGTH_WITHOUT_CRC; i++) {
sum += (char)frame[i];
}
return (char) ('H' + sum % 16);
}

Arduino C 代码:

char checksum(const char * str)
{
uint8_t sum = 0;
for (uint8_t i = 0; i < FRAME_LENGTH_WITHOUT_CRC; i++) {
sum += (uint8_t)str[i];
}
return 'H' + sum % 16;
}

最佳答案

我在所有数据到达之前读取了缓冲区,因此我读取的数据少于我假设已经到达的 21 个字节。我假设在 InputStream 中,in.read(array[], offset, size) 在返回之前读取了所有的 size 字节,但是显然不是。 – 迪默

关于java - Arduino和Java之间的校验和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175358/

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