繼續(xù)整理之前的問題,本文將給出修正后的代碼。這就是知識不斷完善的過程。程序歷經(jīng)多次改版!以后到了企業(yè)里,同學(xué)們必將面臨這個過程。
大家還能發(fā)現(xiàn)程序還有哪些可以推敲的地方嗎?寄存器的初始值如果是1,那又會是什么結(jié)果呢?先來看看R2022目錄里面的代碼吧!
一點微小的變化就能引起這么大的差異?,這就是知識點細節(jié)。再看看通過多項式除法來完成CRC結(jié)果的過程。
這兩個程序之前已經(jīng)在文章中展示了!
這里不再贅述!
再來看看幾種常見的CRC16標準,被用在各個規(guī)范中,算法原理基本一致,就是在數(shù)據(jù)的輸入和輸出有所差異,下將把這些標準的差異列出。
CRC16_CCITT:
多項式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在前,高位在后,結(jié)果與0x0000異或;
注意黃色字體。低位在前會導(dǎo)致結(jié)構(gòu)有變化哦!
變成什么樣呢?
請思考!
提示:地位在前這句話很重要!
原來這個圖也沒有錯啊!
哈哈哈,這就是知識進步的過程!
越來也透徹!
CRC16_CCITT_FALSE:
多項式x^16+x^12+x^5+1(0x1021),初始值0xFFFF,低位在后,高位在前,結(jié)果與0x0000異或;
CRC16_XMODEM:
多項式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在后,高位在前,結(jié)果與0x0000異或;
CRC16_X25:
多項式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在前,高位在后,結(jié)果與0xFFFF異或;
CRC16_MODBUS:
多項式x^16+x^15+x^2+1(0x8005),初始值0xFFFF,低位在前,高位在后,結(jié)果與0x0000異或;
CRC16_IBM:
多項式x^16+x^15+x^2+1(0x8005),初始值0x0000,低位在前,高位在后,結(jié)果與0x0000異或;CRC16_MAXIM:多項式x^16+x^15+x^2+1(0x8005),初始值0x0000,低位在前,高位在后,結(jié)果與0xFFFF異或;
CRC16_USB:
多項式x^16+x^15+x^2+1(0x8005),初始值0xFFFF,低位在前,高位在后,結(jié)果與0xFFFF異或;
CRC16的算法原理:
1. 根據(jù)CRC16的標準選擇初值CRCIn的值;
2. 將數(shù)據(jù)的第一個字節(jié)與CRCIn高8位異或;
3. 判斷最高位,若該位為0,左移一位,若為1,左移一位再與多項式Hex碼異或;
4. 重復(fù)3直至8位全部移位計算結(jié)束;
5. 重復(fù)將所有輸入數(shù)據(jù)操作完成以上步驟,所得16位數(shù)即16位CRC校驗碼。
這么寫文章好似讓大家看連續(xù)劇,本系列的文章堪稱精彩,希望大家能夠好好學(xué)起來。很多同學(xué)沒有MATLAB軟件使用的經(jīng)驗,別擔心,只要你學(xué)過C語言,一個星期的時間就可以用熟MTALAB。前提是你真的用了。2022年,真的遇到一學(xué)期都不安裝MATLAB軟件的學(xué)生。哎,頭大,只能默認不管了,也管不了。多說兩句,學(xué)生也許就覺得你很煩。未完,后面更精彩!
修訂記錄
20221029 完成初稿;
20221221 修訂內(nèi)容v2;
-
通信網(wǎng)絡(luò)
+關(guān)注
關(guān)注
21文章
2074瀏覽量
52783
原文標題:計算機通信與網(wǎng)絡(luò)v2 實驗課程(28)
文章出處:【微信號:gh_30373fc74387,微信公眾號:通信工程師專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
計算機網(wǎng)絡(luò)入門指南

微軟OmniParser V2:大模型轉(zhuǎn)化為計算機智能體
微軟OmniParser V2發(fā)布:大模型轉(zhuǎn)化為計算機智能體
BU-67121W實驗室航空電子接口計算機North Hills
云端超級計算機使用教程
工業(yè)中使用哪種計算機?

量子計算機與普通計算機工作原理的區(qū)別

評論