Оформи код соответствующим тэгом
Здравствуйте, не могу разобраться как реализовать в скетче расчет CRC16 по заданной функции.
Функции для вычисления CRC16:
#define _u8 unsigned char
#define _u16 unsigned short
_u16 crcTable [256];
//--------------------------------------------------------------------------------------------------------------------------
void MakeCRC16Table()
{
_u16 r;
int s, s1;
for(s = 0; s < 256; s++)
{
r = ((_u16)s)<<8;
for (s1 = 0; s1 < 8; s1++)
{
if (r&(1<<15))
r = (r<<1)^0x8005;
else
r = r<<1;
}
crcTable = r;
}
}
//--------------------------------------------------------------------------------------------------------------------------
_u16 GetCRC16(const _u8 *buf, _u16 len)
{
_u16 crc;
crc = 0xFFFF;
while (len--)
{
crc = crcTable [((crc>>8)^*buf++)&0xFF] ^ (crc<<8);
}
crc ^= 0xFFFF;
return crc;
}
имеем на входе
uint8_t data[] = {0x01, 0x64, 0x00, 0x00, 0x00, 0x06, 0x43, 0x4F, 0xC4, 0xD8, 0x5E, 0x01};
crc должно получиться
uint8_t data2[] = {0x9D 0x3C};
Помогите разобраться как это реализовать в скетче, буду признателен за помощь.
Функции для вычисления CRC16:
#define _u8 unsigned char
#define _u16 unsigned short
_u16 crcTable [256];
//--------------------------------------------------------------------------------------------------------------------------
void MakeCRC16Table()
{
_u16 r;
int s, s1;
for(s = 0; s < 256; s++)
{
r = ((_u16)s)<<8;
for (s1 = 0; s1 < 8; s1++)
{
if (r&(1<<15))
r = (r<<1)^0x8005;
else
r = r<<1;
}
crcTable = r;
}
}
//--------------------------------------------------------------------------------------------------------------------------
_u16 GetCRC16(const _u8 *buf, _u16 len)
{
_u16 crc;
crc = 0xFFFF;
while (len--)
{
crc = crcTable [((crc>>8)^*buf++)&0xFF] ^ (crc<<8);
}
crc ^= 0xFFFF;
return crc;
}
имеем на входе
uint8_t data[] = {0x01, 0x64, 0x00, 0x00, 0x00, 0x06, 0x43, 0x4F, 0xC4, 0xD8, 0x5E, 0x01};
crc должно получиться
uint8_t data2[] = {0x9D 0x3C};
Помогите разобраться как это реализовать в скетче, буду признателен за помощь.