三种常用的CRC16校验算法的C51程序的优化 2009-10-10 09:34:17| 分类: 技术知识 | 标签: |字号大 中 小 订阅 CRC校验又称为循环冗余校验,是数据通讯中常用的一种校验算法
它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性
CRC校验有多种方式,如:CRC8、CRC16、CRC32等等
在实际使用中,我们经常使用CRC16校验
CRC16校验也有多种,如:1005多项式、1021多项式(CRC-ITU)等
在这里我们不讨论 CRC算法是怎样产生的,而是重点落在几种算法的C51程序的优化上
计算CRC校验时,最常用的计算方式有三种:查表、计算、查表+计算
一般来说,查表法最快,但是需要较大的空间存放表格;计算法最慢,但是代码最简洁、占用空间最小;而在既要求速度,空间又比较紧张时常用查表+计算法
下面我们分别就这三种方法进行讨论和比较
这里以使用广泛的51单片机为例,分别用查表、计算、查表+计算三种方法计算 1021多项式(CRC-ITU)校验
原始程序都是在网上或杂志上经常能见到的,相信大家也比较熟悉了,甚至就是正在使用或已经使用过的程序
编译平台采用 Keil C51 7
0,使用小内存模式,编译器默认的优化方式
常用的查表法程序如下,这是网上经常能够看到的程序范例
因为篇幅关系,省略了大部分表格的内容
code unsigned int Crc1021Table[256] = { 0x0000, 0x1021, 0x2042, 0x3063,
0x1ef0 }; unsigned int crc0(unsigned char *pData, unsigned char nLength) { unsigned int CRC16 = 0; while(nLength>0) { CRC16 = (C