CRC校验C程序及用labview编写的CRC校验小程序

2015-09-07 16:50:55来源: eefocus
在一些通信规约中,经常会用到数据校验,其中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。

 

//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生成多项式,做相应的修改

       }

        else  ui_CRC <<=1;

     }

       uc_p_Fst ++;

   }

      return(ui_CRC);

}

 

下面贴出用labview编写CRC校验小程序

前面板:

程序框图


 


 



如有错的地方,请大家指正!

关键字:CRC校验  C程序  labview编写

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2015/0907/article_13013.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
CRC校验
C程序
labview编写

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved