计算机通信与网络v2 实验课程(28)

描述

继续整理之前的问题,本文将给出修正后的代码。这就是知识不断完善的过程。程序历经多次改版!以后到了企业里,同学们必将面临这个过程。

通信网络

大家还能发现程序还有哪些可以推敲的地方吗?寄存器的初始值如果是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;


原文标题:计算机通信与网络v2 实验课程(28)

文章出处:【微信公众号:通信工程师专辑】欢迎添加关注!文章转载请注明出处。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分