gpt4 book ai didi

arduino - 如何在arduino上计算256模校验和

转载 作者:行者123 更新时间:2023-12-02 21:25:45 25 4
gpt4 key购买 nike

我正在编写一个计算机程序,该程序利用一些我办公室里很少有的设备的输入。为了开发和测试这个程序,我尝试使用 Arduino 板来模拟实际设备的通信。为此,我在 Arduino 上创建数据包,并通过串行端口将它们发送到我的计算机。数据包的格式为 header 和十六进制整数,表示一些传感器数据。

header 应该包含校验和(2 的补码 256 模)。但我不确定如何计算它。在设备的数据表(我尝试模拟的通信)中,指出我应该首先计算数据包中所有字节的总和,然后取总和的 256 模并执行 8 位二进制补码结果。

但是,由于我是位、字节和串行通信的新手,我不明白以下内容:

1) 假设我想将值 5500 作为两个字节(高字节和低字节)发送。那么十六进制编码的高字节是“15”,低字节是“7c”,对应十进制值的21和124。然后,我是否需要在取 256 模之前将贡献 21 和 124 添加到校验和中,或者我是否必须事先执行一些位魔法?

2) 如何表达两人的赞美?

这是一段代码,应该可以说明我的想法。这个想法是发送一个带有 header 的数据包,该 header 包含一个表示数据包长度的字节、一个表示数据包类型的字节以及一个用于校验和的字节。然后将表示某个传感器值的两字节整数值分为高字节和低字节,并先传输低字节。

int intVal;
byte Len = 5;
byte checksum;
byte Type = 2;
byte intValHi;
byte intValLo;

void setup(){
Serial.begin(9600);
}

void loop(){
intVal = 5500; //assume that this is a sensor value
intValHi = highByte(intVal);
intValLo = lowByte(intVal);

//how to calculate the checksum? I unsuccessfully tried the following
checksum = 0;
checksum = (Len+checksum+Type+intValHi+intValLo) % 256;

//send header
Serial.write(Len);
Serial.write(checksum);
Serial.write(Type);
//send sensor data
Serial.write(intValLo);
Serial.write(intValHi)
}

谢谢!

最佳答案

您应该了解的第一件事是 mod 256 与查看底部 log(256) => 8 位是一样的。

要理解这一点,您必须首先了解“mod”操作的作用以及数字在硬件中的表示方式。

Mod 是老式除法后的余数(即仅包含整数)。例如 5%2 = 1

硬件中的数字存储在“位”中,可以将其解释为以 2 为基数的数学。

因此,如果您想进行 2 的幂的取模运算,您实际上不需要做任何数学运算。

这就像如果你想要 10 的幂的余数,你只需取较低的数字即可。

即。 157 % 100 = 57。

可以通过字节本身溢出这一事实来加速这一过程。这意味着要获取一堆数字中的 %256,您所需要做的就是将它们添加到单个字节,arduino 将处理其余的事情。

对于双重恭维,请参阅这个问题:

What is “2's Complement”?

关于arduino - 如何在arduino上计算256模校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24407713/

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