//==============================================//
// Функция подсчета СRC16 по алгоритму //
//----------------------------------------------//
//аргументы: указатель на буфер, //
// размер буфера, //
// стартовое значение СRC16 //
//возвращает:подсчитанное значение СRC16 //
//----------------------------------------------//
//ВНИМАНИЕ! Стартовому значению CRC16 необходимо//
// присвоить значение 0xFFFF, //
// размер массива для подсчета CRC16 //
// не более 65535 байт //
//==============================================//
#ifndef _POLINOME_CRC16_
#define _POLINOME_CRC16_ 0xA001
#endif
unsigned f_CRC16Calc(unsigned char *buf, unsigned sizeBuf, unsigned crc)
{ unsigned i, j;
for(i=0;i<sizeBuf;i++)
{ crc=crc^buf[i];
for (j=0;j<8;j++)
{ if ((crc&0x0001)!=0x0000) crc=(crc>>1)^_POLINOME_CRC16_;
else crc>>=1;
}
}
return (crc);
}