Atmega128单片机CRC校验码的查表与直接生成
中,在通过异或运算得到CRC生成表的索引时,由于AVR高速嵌入式单片机中的寄存器是以1个字节为单元的,所以在编程实现中应根据所要求生成的CRC校验码的位数乘以相应的系数。例如:在数据传输时要求32位CRC校验码,应该把所得到的索引数乘以系数4,然后再从高到低依次取得32位CRC生成表单元中的内容。
使用查表法得到32位CRC校验码的源程序详见本刊网络补充版(http://www.dpj.com.cn)。
3 实验结果
为了比较所述两种32位CRC校验码生成方法的特点,分别选取不同字节数的数据段,对两种方法在不同情况下的效果进行比较,如表1所列。
表1 两种算法实验结果对比
计算法生成32位CRC校验码 | 查表法生成32位CRC校验码 | |||
数据段字节数 | 程序耗时/μs | 周期数 | 程序耗时/μs | 周期数 |
3 | 193.67 | 2324 | 29.33 | 352 |
4 | 222.50 | 2670 | 34.83 | 418 |
10 | 319.58 | 3835 | 48.58 | 583 |
20 | 517.92 | 6215 | 76.08 | 913 |
40 | 886.25 | 10635 | 131.08 | 1573 |
80 | 1582.92 | 189995 | 241.08 | 2893 |
150 | 2957.08 | 35485 | 433.58 | 5203 |
200 | 3891.25 | 46695 | 571.08 | 6853 |
220 | 4267.92 | 51215 | 626.08 | 7513 |
239 | 4645.17 | 55742 | 678.33 | 8140 |
240 | 4659.58 | 55915 | 681.08 | 8173 |
250 | 4872.92 | 58475 | 708.58 | 8503 |
以上所有实验结果均是在AVR Studio4仿真软件上选用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校验码;但是它们各有特点,在工程应用中应该根据实际需要选择最适合的方法,以得到最优的效果。
Atmega128 CRC校验码 CRC生成表 数据段 相关文章:
- 基于ATmega128单片机的矿用磁力启动器控制系统设计(06-04)
- 一款宠物狗无线感知交互系统让人和动物的社交网络成真(06-03)
- ATmega128 流水灯的两种实现方法(基于AVR GCC)(11-23)
- Atmega128串口详解(11-23)
- 基于ATMEGA128单片机压力的测量(11-21)
- ATmega128型号标识说明(11-11)