AVR单片机CRC校验码的查表与直接生成

[09-12 17:48:32]   来源:http://www.88dzw.com  单片机学习   阅读:8886

文章摘要:m(x) 生成多项式的系数为0或1,但是m(x) 的首项系数为1,末项系数也必须为1。m(x) 的次数越高,其检错能力越强。2 使用Atmega128生成32位CRC校验码 2.1 直接计算法生成32位CRC校验码直接计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。这种算法简单,容易实现,对任意长度生成多项式m(x) 都适用。在发送的数据不长的情况下可以使用,但是如果发送的数据块很长,这种方法就不太适合了。因为它1次只能处理1位数据,效率太低,运算量大。计算法生成32位CRC校验码的流程如图1所示。用AVR单片机汇编语言实现CRC-32源程序见本

AVR单片机CRC校验码的查表与直接生成,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

  m(x) 生成多项式的系数为0或1,但是m(x) 的首项系数为1,末项系数也必须为1。m(x) 的次数越高,其检错能力越强。

2 使用Atmega128生成32位CRC校验码

2.1 直接计算法生成32位CRC校验码

  直接计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。这种算法简单,容易实现,对任意长度生成多项式m(x) 都适用。在发送的数据不长的情况下可以使用,但是如果发送的数据块很长,这种方法就不太适合了。因为它1次只能处理1位数据,效率太低,运算量大。

  计算法生成32位CRC校验码的流程如图1所示。

  用AVR单片机汇编语言实现CRC-32源程序见本刊网络补充版(http://www.88dzw.com)。

2.2 查表法生成32位CRC校验码

  和直接计算法相反,查表法生成32位CRC校验码的优点是运算量小,速度快;缺点是可移植性较差。这种算法首先要求得到32位CRC生成表,由于1个字节有8位,所以这个表总共有256项。但是,由于AVR高速嵌入式单片机中的寄存器是以1个字节为单位的,所以在编程实现中,这个CRC生成表总共有1024项,分别从0~1023;每4位对应1个32位CRC生成表的项,每一项都从高到低降幂排列。关于32位CRC生成表的程序详见本刊网络补充版(http://www.88dzw.com)。

  查表法生成32位CRC校验码的流程如图2所示。

  图2所示的流程图中,在通过异或运算得到CRC生成表的索引时,由于AVR高速嵌入式单片机中的寄存器是以1个字节为单元的,所以在编程实现中应根据所要求生成的CRC校验码的位数乘以相应的系数。例如:在数据传输时要求32位CRC校验码,应该把所得到的索引数乘以系数4,然后再从高到低依次取得32位CRC生成表单元中的内容。

  使用查表法得到32位CRC校验码的源程序详见本刊网络补充版(http://www.88dzw.com)。

3 实验结果

  为了比较所述两种32位CRC校验码生成方法的特点,分别选取不同字节数的数据段,对两种方法在不同情况下的效果进行比较,如表1所列。

表1 两种算法实验结果对比

计算法生成32位CRC校验码查表法生成32位CRC校验码
数据段字节数程序耗时/μs周期数程序耗时/μs周期数
3193.67232429.33352
4222.50267034.83418
10319.58383548.58583
20517.92621576.08913
40886.2510635131.081573
801582.92189995241.082893
1502957.0835485433.585203
2003891.2546695571.086853
2204267.9251215626.087513
2394645.1755742678.338140
2404659.5855915681.088173
2504872.9258475708.588503

上一页  [1] [2] [3]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行