CRC校验最终个人总结
CRC校验最终个人总结:某二进制信息码(kn)的CRC校验需选
择一个合适的g(x)除数(校验因子)如:CRC-7为X+X+1=10001001
73宽度为7,此校验因子根据设计的需求来选择(如:CRC-32/CRC-16)。注意,在计算CRC前必须将二进制信息码左移7位(kn*2),这里的7来源于所选择的检验因子的宽度。然后,再与除数进行模2运算(从kn的最高位开始和除数进行异或运算)。最后所剩的宽度为7的7位余数就是最终CRC计算结果(当计算到只剩7位余数时就不要再计算了)。之后就可以将经过CRC校验后的信息码+CRC一起发送给对方,对方收到添有CRC的信息码后,将这串代码再和校验因子进行异或运算看结果是否为0。例如:kn=01000000=0x40g(x)=X+X+1=10001001宽度为7
1:移位01000000左移7位=100000000000002:异或运算
10000000000000
10001001校验因子1001000000
10001001
1100100最终CRC计算结果3:传输发送
10000001100100
信息码CRC结果4:接收检验
10000001100100
10001001校验因子1000100100
10001001校验因子0
73扩展阅读:单片机crc校验实验报告
单片机课程总实验
实现CRC校验
一、实验目的
⒈通过学习CRC原理,验证,检错,掌握其工作原理;⒉编写CRC
数应该异或之后少一位}
tst0>>=1;//位数减一,最高位降低一位
GD>>=1;//除数保持和被除数最高位对齐,相当于竖式除法左对齐}i=0;
while(1)//转化为2进制输出,16进制数模2取余,移位{b[i]=MD%2;i++;MD/=2;if(MD==0||i>6)break;}}
voidmain(){
C8255_CON=0x81;//8255初始化CRC_check(0x28D,0x35);//16进制
while(1)//显示{
display();delay(0x80);clear();
}}七、实验心得
实验指导书上写的还是很好懂,只是最初接触的时候确实感觉代码好多陌生,因为这个调用机制,变量基本上都是公有变量,直接在函数里面使用,赋值,在另一个函数里面接着用。看起来函数都是无参和无返回值的。不过后来仔细看了之后发现这个了之后,使用起来还是蛮顺手的了。虽然还是习惯使用带参数的函数,但是不用写返回值这一点倒也能适应。在除法实现方面,通过百度找到了一种模拟竖式除法的方式,左对齐,异或,根据结果商数,再左对齐,异或。如此就采用了除数与被除数位数对齐,除数不足位数补0的方式,因为0与任何数异或还是它本身,所以用0补足之后,除数和被除数整体异或的结果和竖式除法左对齐异或的结果是一样的。M位除以N位,每次异或之后结果会降低一位,最终会得到M-N+1位商和N-1位余数或者0余数。
友情提示:本文中关于《CRC校验最终个人总结》给出的范例仅供您参考拓展思维使用,CRC校验最终个人总结:该篇文章建议您自主创作。