新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > CRC校驗C程序及用labview編寫的CRC校驗小程序

        CRC校驗C程序及用labview編寫的CRC校驗小程序

        作者: 時間:2017-01-09 來源:網絡 收藏
        在一些通信規約中,經常會用到數據校驗,其中CRC(Cyclical Redundancy Check)最為常見。它是利用除法及余數的原理來作錯誤偵測的,實際應用時,發送裝置計算出CRC值并隨數據一同發送給接收裝置,接收裝置對收到的數據重新計算CRC并與收到的CRC相比較,若兩個CRC值不同,則說明數據通信出現錯誤。有關CRC算法的原理就不詳細說了,直接貼出C程序,用到的時候根據CRC生成多項式,做一些修改即可。

        舉個例子:CRC生成多項式G(x)= x^16 + x^15 + x^13 + 1根據該多項式系數,就可以判斷CRC值為16位兩字節數。從bit0位 到 bit15位 ,可知系數為1010 0000 0000 0001,所以簡記為OxAOO1。

        本文引用地址:http://www.104case.com/article/201701/337146.htm

        //uc_p_Fst:校驗的起始數據指針

        //uc_p_End:指向校驗結束數據的下一個數據的指針

        //ui_CRC:初始數據(注意有些網上給出的程序習慣初始值為0 或初始值為0xffff,這兩種情況下校驗時的方向不同,前者校驗位左移,后者右移,具體原因我也解釋不清楚。)

        uint16 CheckCRC(uint8* uc_p_Fst,uint8* uc_p_End,uint16 ui_CRC)

        {

        uint16 ui_Reg,i;

        while(uc_p_Fst < uc_p_End)

        {

        ui_CRC = ui_CRC ^ (((uint16)(*uc_p_Fst))<<8);

        for(i=0;i<8;i++)

        {

        ui_Reg = ui_CRC & 0x8000;

        if(ui_Reg)

        {

        ui_CRC <<=1;//注意左移

        ui_CRC = ui_CRC ^ 0xA001;// 這個地方就是用到不同的CRC生成多項式,做相應的修改

        }

        elseui_CRC <<=1;

        }

        uc_p_Fst ++;

        }

        return(ui_CRC);

        }

        下面貼出用labview編寫CRC校驗小程序

        前面板:

        程序框圖





        如有錯的地方,請大家指正!



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 巫溪县| 郑州市| 邻水| 新绛县| 吉林市| 道真| 黄石市| 昌平区| 闽清县| 平塘县| 包头市| 汝南县| 利辛县| 宿州市| 宁波市| 涞水县| 岗巴县| 东安县| 平潭县| 隆化县| 当雄县| 峡江县| 综艺| 祁东县| 西城区| 蕲春县| 黔南| 嫩江县| 中山市| 策勒县| 新沂市| 江川县| 连山| 东宁县| 海阳市| 鄄城县| 封丘县| 蒙阴县| 绍兴市| 木兰县| 丹东市|