<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > CRC校驗C程序及用labview編寫的CRC校驗小程序

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201701/337146.htm

          //uc_p_Fst:校驗的起始數(shù)據(jù)指針

          //uc_p_End:指向校驗結(jié)束數(shù)據(jù)的下一個數(shù)據(jù)的指針

          //ui_CRC:初始數(shù)據(jù)(注意有些網(wǎng)上給出的程序習(xí)慣初始值為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生成多項式,做相應(yīng)的修改

          }

          elseui_CRC <<=1;

          }

          uc_p_Fst ++;

          }

          return(ui_CRC);

          }

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

          前面板:

          程序框圖





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



          關(guān)鍵詞: CRC校驗C程序labview編

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();