-2

我对校验和很陌生,对编程也很陌生。我有一个相当简单的 C++ 程序(测量 psi),我正在转移到 Arduino 板上。crc16 可以吗,还是我应该使用 crc32 还是会矫枉过正?

4

2 回答 2

0

校验和出现在不可靠的通信渠道的背景下。通信通道是一种抽象;位在一端进入,从另一端出来。一个不可靠的通道仅仅意味着出来的位与进入的位不同。

现在显然最极端的不可靠通道有随机位出来。这是不可用的,所以我们关注输入和输出相关的通道。

尽管如此,我们有许多不同的腐败模式。一个常见的模型是每个位都有 P% 的可能失败。另一种常见模型认为位错误通常以突发形式出现。然后,每个位都有 P% 的机会引发长度为 N 的大量错误,其中每个位有 50% 的可能性是错误的。存在更多模型,具体取决于您的问题 - 更高级的模型还考虑了位完全丢失的可能性。

正确的校验和很有可能检测到模型预测的错误类型,但可能不适用于其他类型的错误。

例如,我认为对于 Internet IP 层,最常见的错误是整个 IP 数据包丢失。这就是 TCP 使用序列号来检测这个特定错误的原因。

于 2016-08-04T08:30:08.633 回答
0

检查可执行文件是否已正确传输到 Arduino 板的一种可能方法是使用简单的校验和,例如md5,甚至更简单的方法,例如计算 16 位哈希的粗略哈希函数。参见例如这个答案以获得灵感。

于 2016-08-04T08:34:00.967 回答