新闻中心

EEPW首页>手机与无线通信>设计应用> CRC校验编程和硬件快速校验探讨

CRC校验编程和硬件快速校验探讨

作者: 时间:2011-04-14 来源:网络 收藏

2 嵌入式系统
如上所述,k+r位的被模除数采用右移的方法不断地同反序的约定多项式对位模除,也就遵从了从高位向低位不断减余的除法规则。但由于不必求模除的商,因此只要将被模除数不断地右移位,与去掉最高位的反序约定多项式模减,求得余数即可。
但如果被模除数最低位右端的移出位是O,则无论从左端添进多少个O,也不够模除约定多项式(其隐含的最高位是1)。在此情况下该位的商是O,余数不变,不应再同约定多项式对位模减,而要继续左添O右移位,直到当前余数(被模除数)右移出的位值为1才够模除(商1),才可将余数再对位模减一次多项式。由此看出,将约定多项式去掉最高位,可以使模减(异或)的计算位数r减少(一般r都正好是1字节位数的整数倍)。
由于被模除数是k+r位的,因此总共需要右移k位,即左添进尼个O,才能模除到最低位结束。得到的余数最多是r位(约定多项式为r+1位),再将它异或人一个新数据,作为新的被模除数。
每异或进一个数据,求新一轮码,都只进行走(字节数据是一8)次的右移和一般都少于是次的模减(异或)运算,而且模减的中间差值无需保留(后值覆盖前值)。因此码生成的运算过程,就是右移位、判断移出位为1则同多项式模减(C语言不能对移出位检测,需将余数备份后同0xol相“与”)、差值回存后再右移的是次循环过程,如图1所示。之后,再异或进下一个数据(该步与查表法一致)。得当的话运算量很小。
笔者用51汇编语言编写(2R(:一8程序,算得1字节数据的CRC码,只需64~80个机器周期,只多用1字节RAM单元(CR(:一16多用2字节,时间加倍)来存储余数,即下一次的被模除数(不断覆盖上一次已无用的)。因此,完全可以直接运算,而不必存储大量的数据表格。C语言,要考虑语句代码的优化以及只定义使用int和char型局部变量,以免耗时和占用RAM单元太多。

接收方对于最后收到的r位CRC校验码,不需要再纳入模除而使最终余数为O,只需同信息数据的模除余数比较,相等则确定通信正确。这样可以减少模除循环次数,节省时间。

c语言相关文章:c语言教程


分频器相关文章:分频器原理


评论


相关推荐

技术专区

关闭