int main()
{
unsigned short recive_len = 0;
unsigned short recive_count = 0;
unsigned char recive_data[1024] = {0};
unsigned char recive_error = 0;
unsigned char testbuff[1024] = {0x7e,0x05,0x00,0x31,0x32,0x7d,0x01,0x7d,0x02,0x44,0x3f,0x7e};//0x7e,0x05,0x00,0x31,0x32,0x7d,0x01,0x7d,0x02,0x44,0x3f,0x7e
unsigned short testsize = 1024;
unsigned short i = 0;
unsigned char crc = 0;
recive_len = (testbuff[2] <<8 | testbuff[1]);
if(testbuff[0] != 0x7e)
{
recive_error = 1;
}
else
{
for(i = 0;i<testsize;i++)
{
if(testbuff[i] == 0x7d)
{
++i;
if(testbuff[i] == 0x01)
{
recive_data[recive_count++] = 0x7d;
}
else if(testbuff[i] == 0x02)
{
recive_data[recive_count++] = 0x7e;
}
else
{
recive_error = 1;
}
}
else
{
recive_data[recive_count++] = testbuff[i];
}
}
}
for(i = 0;i<(3+recive_len);i++)
{
crc^=recive_data[i];
}
if((crc != recive_data[3+recive_len])||(recive_data[3+recive_len+1] != 0x7e))
{
recive_error = 1;
}
if(recive_error != 1)
{
for(i=0;i<(3+recive_len+2);i++)
{
printf("recive_data[%d] %x\r",i,recive_data[i]);
}
printf("crc %x\r",crc);
}
else
{
printf("error \r");
}
}