📄 crc.c
字号:
//1999.05.31
#include "..\\inc\\comm.h"
#include "..\\inc\\n4f.h"
// get 16 bits crc_check code */
/*
crc_check = 0xFFFF;
byte_count = 6;
for(i=0;i<byte_count;i++)
{
crc_check = crc_check^(WORD)(buffer[i]);
for(j=0;j<8;j++)
{ crc_temp = crc_check & 0x0001;
crc_check = crc_check >> 1;
if(crc_temp == 0x0001) { crc_check = crc_check ^ 0xA001;}
}
}
buffer[byte_count] = (BYTE)(crc_check);
buffer[byte_count+1] = (BYTE)((crc_check>>8));
*/
void Get_crc16( int N, char *buffer )
{ // g(x)=X^16 + X^15 + X^2 + 1
WORD CRCCODE=(WORD)0xA001;
WORD crc_check,crc_temp;
int byte_count, i, j;
crc_check = (WORD)0x0000; //for HDWD
//crc_check = (WORD)0xFFFF;
byte_count = N;
for(i=0;i<byte_count;i++)
{
crc_check = crc_check^( ((WORD)( *(buffer+i)) & 0x00ff) );
for(j=0;j<8;j++)
{ crc_temp = crc_check & (WORD)0x0001;
crc_check = crc_check >> 1;
if(crc_temp == (WORD)0x0001) { crc_check = crc_check ^ CRCCODE;}
}
}
*(buffer+byte_count) = (BYTE)(crc_check);
*(buffer+byte_count+1) = (BYTE)((crc_check>>8));
}
extern char rcvbuf[BUFSIZE];
extern int rcvlen;
int Check_crc()
{ char tmpbuf[BUFSIZE],*tmpbuf_p;
memcpy( tmpbuf, rcvbuf, rcvlen );
tmpbuf_p=tmpbuf;
if( (rcvbuf[1]==TYPE_05H)||(rcvbuf[1]==TYPE_1AH) )
{ //check_crc8
//1020 Get_crc8( rcvlen, tmpbuf_p );
return(OK);//@@@@@@@@@@
Get_crc8( rcvlen-1, tmpbuf_p );
if( (char)(*(tmpbuf_p+rcvlen-1))==rcvbuf[rcvlen-1] )
{
return( OK );
}
else
{ printf("!!!!! Check_crc8 error! ( crc= 0x%x )\n",*(tmpbuf_p+rcvlen-1) );
return(FAILURE);
}
}
else
{ //check_crc16
Get_crc16( rcvlen-2, tmpbuf_p );
if( ((*(tmpbuf_p+rcvlen-2))==rcvbuf[rcvlen-2])
&&((*(tmpbuf_p+rcvlen-1))==rcvbuf[rcvlen-1]) )
{
return( OK );
}
else
{ printf("!!!!!! Check_crc16 error! ( 0x%x 0x%x )\n",
*(tmpbuf_p+rcvlen-2), *(tmpbuf_p+rcvlen-1) );
return(FAILURE);
}
}
}
//**********************************************************
void Get_crc8( int N, char *buffer )
{ // g(x)=X^7 + X^4 + 1
char CRCCODE=(char)0x91;
char crc_check, crc_temp;
int byte_count, i, j;
//crc_check = (char)0xFF;
crc_check = (char)0x00;
byte_count = N;
for(i=0;i<byte_count;i++)
{
crc_check = crc_check^( ((char)(*(buffer+i)) & 0x00ff) );
for(j=0;j<8;j++)
{ crc_temp = crc_check & (char)0x01;
crc_check = crc_check >> 1;
if( crc_temp == (char)0x01 ) { crc_check = crc_check ^ CRCCODE;}
}
}
*(buffer+byte_count) = (BYTE)(crc_check);
}
//*************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -