CRC.docx

上传人:b****6 文档编号:8176303 上传时间:2023-01-29 格式:DOCX 页数:8 大小:393.22KB
下载 相关 举报
CRC.docx_第1页
第1页 / 共8页
CRC.docx_第2页
第2页 / 共8页
CRC.docx_第3页
第3页 / 共8页
CRC.docx_第4页
第4页 / 共8页
CRC.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

CRC.docx

《CRC.docx》由会员分享,可在线阅读,更多相关《CRC.docx(8页珍藏版)》请在冰豆网上搜索。

CRC.docx

CRC

CRC真正的原理说明:

●【CRC校验的C语言实现:

⏹下面我们以CRC-16为例子说明任意长度数据流的CRC校验码生成过程。

我们采用将数据流分成若干个8bit的字符,并由低字节到高字节传送的并行方法来求出crc校验码。

具体过程:

用一个16bit的寄存器存放CRC校验值,且设定其初始值为0x0000,将数据流的第一个8bit与16bit的CRC寄存器的高字节进行异或运算,并将结果存入CRC的高字节;CRC寄存器左移一位,最低位补0;同时检测移出最高位;若移出的最高位为0;则继续按上述方法左移,若最高位为1,则将CRC寄存器中的值与生成多项式码想异或,结果存入到CRC寄存器;继续左移并重复上述处理方法,直到8bit数据处理完为止,则此时CRC寄存器中的值就是第一个8bit数据对应的CRC校验码;然后将此CRC寄存器的值作为初值,用同样的方法重复上述步骤来处理下一个8bit数据流,直到所有8bit字符都处理完毕,此时CRC寄存器的值即为整个数据流对应的CRC校验码。

生成多项式对应的16进制为0x18005;由于CRC寄存器左移过程中,移出的最高一位为1时与之相异或,所以与16bit的CRC寄存器对应的生成多项式可用0x8005表示。

下面给出处理8bit数据流得C源程序:

Unsignedshortcrc_dsp(unsignedshortreg,unsignedchardata_crc)

//reg:

为crc寄存器;data_crc要处理的数据流

{

Unsignedshortmsb;//crc寄存器将移出的最高位1bit

Unsignedshortdata;

Unsignedshortgx=0x8005,i=0;//i为左移次数gx为生成多项式

Data=(unsignedshort)data_crc;

Data=data<<8;

Reg=reg^data;

do

{

msb=reg&0x8000;

reg=reg<<1;

if(msb==0x8000)

{

reg=reg^gx;

}

i++;

}while(i<8);

Return(reg);

}

【查表发求crc:

unsignedinttable_crc(unsignedchar*ptr,unsignedcharlen)

{

unsignedcharda;

unsignedintcrc=0;

while(len--)

{

da=(unsignedchar)(crc/256);//crc的高8位

crc<<=8;

crc^=crc_ta[da^*ptr];//高字节和当前数据xor再查表

ptr++;

}

returncrc;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1