首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单片机上短数据的校验和?

单片机上短数据的校验和?
EN

Stack Overflow用户
提问于 2015-05-14 23:45:13
回答 2查看 1.1K关注 0票数 1

我正在寻找一个好的校验和短二进制数据消息(典型的3-5字节)在一个微控制器。我想要一些能检测到有时会在SPI总线上发生的错误类型的东西,例如个别错误和重复错误("abc“-> "bcd”和"abc"->"aab")。此外,它还应该捕捉所有-零,所有-1和所有相同值的边缘情况。校验和可以添加2-4字节.

运行速度并不像处理大量数据那么重要;但是代码大小在某种程度上是很重要的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 00:34:23

最后我使用了CRC16 CCITT。这是目标系统上编译的代码的大约50字节(不使用任何查找表!),运行速度相当快,并且非常恰当地处理所有-零和全部-1的情况。

代码(来自http://www.sal.wisc.edu/st5000/documents/tables/crc16.c):

代码语言:javascript
复制
unsigned short int
crc16(unsigned char *p, int n)
{
    unsigned short int crc = 0xffff;

    while (n-- > 0) {
        crc  = (unsigned char)(crc >> 8) | (crc << 8);
        crc ^= *p++;
        crc ^= (unsigned char)(crc & 0xff) >> 4;
        crc ^= (crc << 8) << 4;
        crc ^= ((crc & 0xff) << 4) << 1;
    }

    return(crc);
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-15 02:27:28

关于cksum使用的算法,请参见http://pubs.opengroup.org/onlinepubs/009695299/utilities/cksum.html,该算法本身基于以太网标准中使用的算法。它在以太网中的用途是捕捉与您所面临的错误相似的错误。

该算法将为任意大小的数据提供一个4字节的校验和。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30249273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档