继续整理之前的问题,本文将给出修正后的代码。这就是知识不断完善的过程。程序历经多次改版!以后到了企业里,同学们必将面临这个过程。
大家还能发现程序还有哪些可以推敲的地方吗?寄存器的初始值如果是1,那又会是什么结果呢?先来看看R2022目录里面的代码吧!
一点微小的变化就能引起这么大的差异?,这就是知识点细节。再看看通过多项式除法来完成CRC结果的过程。
这两个程序之前已经在文章中展示了!
这里不再赘述!
再来看看几种常见的CRC16标准,被用在各个规范中,算法原理基本一致,就是在数据的输入和输出有所差异,下将把这些标准的差异列出。
CRC16_CCITT:
多项式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或;
注意黄色字体。低位在前会导致结构有变化哦!
变成什么样呢?
请思考!
提示:地位在前这句话很重要!
原来这个图也没有错啊!
哈哈哈,这就是知识进步的过程!
越来也透彻!
CRC16_CCITT_FALSE:
多项式x^16+x^12+x^5+1(0x1021),初始值0xFFFF,低位在后,高位在前,结果与0x0000异或;
CRC16_XMODEM:
多项式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在后,高位在前,结果与0x0000异或;
CRC16_X25:
多项式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0xFFFF异或;
CRC16_MODBUS:
多项式x^16+x^15+x^2+1(0x8005),初始值0xFFFF,低位在前,高位在后,结果与0x0000异或;
CRC16_IBM:
多项式x^16+x^15+x^2+1(0x8005),初始值0x0000,低位在前,高位在后,结果与0x0000异或;CRC16_MAXIM:多项式x^16+x^15+x^2+1(0x8005),初始值0x0000,低位在前,高位在后,结果与0xFFFF异或;
CRC16_USB:
多项式x^16+x^15+x^2+1(0x8005),初始值0xFFFF,低位在前,高位在后,结果与0xFFFF异或;
CRC16的算法原理:
1. 根据CRC16的标准选择初值CRCIn的值;
2. 将数据的第一个字节与CRCIn高8位异或;
3. 判断最高位,若该位为0,左移一位,若为1,左移一位再与多项式Hex码异或;
4. 重复3直至8位全部移位计算结束;
5. 重复将所有输入数据操作完成以上步骤,所得16位数即16位CRC校验码。
这么写文章好似让大家看连续剧,本系列的文章堪称精彩,希望大家能够好好学起来。很多同学没有MATLAB软件使用的经验,别担心,只要你学过C语言,一个星期的时间就可以用熟MTALAB。前提是你真的用了。2022年,真的遇到一学期都不安装MATLAB软件的学生。哎,头大,只能默认不管了,也管不了。多说两句,学生也许就觉得你很烦。未完,后面更精彩!
修订记录
20221029 完成初稿;
20221221 修订内容v2;
-
通信网络
+关注
关注
21文章
2025浏览量
51934
原文标题:计算机通信与网络v2 实验课程(28)
文章出处:【微信号:gh_30373fc74387,微信公众号:通信工程师专辑】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论