AVR单片机CRC校验码的查表与直接生成
生成表总共有1024项,分别从0~1023;每4位对应1个32位CRC生成表的项,每一项都从高到低降幂排列。关于32位CRC生成表的程序详见本刊网络补充版(http://fanwen.oyaya.net收集整理)。
查表法生成32位CRC校验码的流程如图2所示。
图2所示的流程图中,在通过异或运算得到CRC生成表的索引时,由于AVR高速嵌入式单片机中的寄存器是以1个字节为单元的,所以在编程实现中应根据所要求生成的CRC校验码的位数乘以相应的系数。例如:在数据传输时要求32位CRC校验码,应该把所得到的索引数乘以系数4,然后再从高到低依次取得32位CRC生成表单元中的内容。
使用查表法得到32位CRC校验码的源程序详见本刊网络补充版(http://fanwen.oyaya.net收集整理)。
3实验结果
为了比较所述两种32位CRC校验码生成方法的特点,分别选取不同字节数的数据段,对两种方法在不同情况下的效果进行比较,如表1所列。
表1两种算法实验结果对比
计算法生成32位CRC校验码查表法生成32位CRC校验码数据段字节数程序耗时/μs周期数程序耗时/μs周期数3193.67232429.333524222.50267034.8341810319.58383548.5858320517.92621576.0891340886.2510635131.081573801582.92189995241.0828931502957.0835485433.5852032003891.2546695571.0868532204267.9251215626.0875132394645.1755742678.3381402404659.5855915681.0881732504872.9258475708.588503
以上所有实验结果均是在AVRStudio4仿真软件上选用Atmel公司的Atmega128高速嵌入式单片机为实验设备平台,在12MHz运行速度下模拟所得。
在调用32位CRC生成表程序以得到32位CRC生成表时,耗时3968.33μs,执行了47620个时钟周期。从上述实验结果可得出以下几点结论。
①如果不考虑生成32位CRC生成表的时间,例如直接把32位CRC生成表烧入到Atmega128的可编程闪速存储器Flash中,由表1可清楚地看出,查表法的运行速度比直接计算法要快得多。因此,在类似情况下,在进行数据传输要求生成32位CRC校验码时,应该选择查表法。
②在某些应用中,如果对硬件存储器空间要求很高,并且在一定程度上对时间没有特别高的要求时,可以采用直接计算法,以避免查表法中CRC生成表对存储器空间的占用。
③虽然实验结果对32位CRC校验码的两种算法进行了对比,但是所得到的结论也适用于8位、16位、24位CRC校验码。
结语
CRC循环冗余校验码是一种方便、有效、快速的校验方法,被广泛应用在许多实际工程中。文中所列的两种算法——查表法和直接计算法,都可以得到CRC校验码;但是它们各有特点,在工程应用中应该根据实际需要选择最适合的方法,以得到最优的效果。
《AVR单片机CRC校验码的查表与直接生成(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/175666.html
查表法生成32位CRC校验码的流程如图2所示。
图2所示的流程图中,在通过异或运算得到CRC生成表的索引时,由于AVR高速嵌入式单片机中的寄存器是以1个字节为单元的,所以在编程实现中应根据所要求生成的CRC校验码的位数乘以相应的系数。例如:在数据传输时要求32位CRC校验码,应该把所得到的索引数乘以系数4,然后再从高到低依次取得32位CRC生成表单元中的内容。
使用查表法得到32位CRC校验码的源程序详见本刊网络补充版(http://fanwen.oyaya.net收集整理)。
3实验结果
为了比较所述两种32位CRC校验码生成方法的特点,分别选取不同字节数的数据段,对两种方法在不同情况下的效果进行比较,如表1所列。
表1两种算法实验结果对比
计算法生成32位CRC校验码查表法生成32位CRC校验码数据段字节数程序耗时/μs周期数程序耗时/μs周期数3193.67232429.333524222.50267034.8341810319.58383548.5858320517.92621576.0891340886.2510635131.081573801582.92189995241.0828931502957.0835485433.5852032003891.2546695571.0868532204267.9251215626.0875132394645.1755742678.3381402404659.5855915681.0881732504872.9258475708.588503
以上所有实验结果均是在AVRStudio4仿真软件上选用Atmel公司的Atmega128高速嵌入式单片机为实验设备平台,在12MHz运行速度下模拟所得。
在调用32位CRC生成表程序以得到32位CRC生成表时,耗时3968.33μs,执行了47620个时钟周期。从上述实验结果可得出以下几点结论。
①如果不考虑生成32位CRC生成表的时间,例如直接把32位CRC生成表烧入到Atmega128的可编程闪速存储器Flash中,由表1可清楚地看出,查表法的运行速度比直接计算法要快得多。因此,在类似情况下,在进行数据传输要求生成32位CRC校验码时,应该选择查表法。
②在某些应用中,如果对硬件存储器空间要求很高,并且在一定程度上对时间没有特别高的要求时,可以采用直接计算法,以避免查表法中CRC生成表对存储器空间的占用。
③虽然实验结果对32位CRC校验码的两种算法进行了对比,但是所得到的结论也适用于8位、16位、24位CRC校验码。
结语
CRC循环冗余校验码是一种方便、有效、快速的校验方法,被广泛应用在许多实际工程中。文中所列的两种算法——查表法和直接计算法,都可以得到CRC校验码;但是它们各有特点,在工程应用中应该根据实际需要选择最适合的方法,以得到最优的效果。
《AVR单片机CRC校验码的查表与直接生成(第2页)》