您的位置 首页 元件

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

在一些通信规约中,经常会用到数据校验,其中CRC(CyclicalRedundancyCheck)最为常见。它是利用除法及余数的原理来作错误侦测的,实际应

在一些通讯规约中,常常会用到数据校验,其间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生成多项式,做相应的修正

}

elseui_CRC <<=1;

}

uc_p_Fst ++;

}

return(ui_CRC);

}

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

前面板:

程序框图

如有错的当地,请我们纠正!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/211070.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部