Вот еще несколько:
(«Телесистемы»: Конференция 'Микроконтроллеры и их применение')

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 04 ноября 2004 г. 18:21
В ответ на: Ответ: Если поможет, CRC16 на Си. Как менять полином - очевидно из текста отправлено slt 04 ноября 2004 г. 12:11


//==============================================================//
// Calculate one byte of XModem CRC //
//==============================================================//
// Этот же полином пользуется в IrDA
static void DoCRC (u8 Data, u16 &CRC) {
CRC ^= Data;
u8 i = 8;
do {
if (CRC & 0x01) { CRC >>= 1; CRC ^= 0x8408; }
else CRC >>= 1;
}while(--i);
}

//То же для битового потока:
static void DoCRCBit (bool Bit, u16 &CRC) {
CRC ^= Bit;
if (CRC & 0x01) { CRC >>= 1; CRC ^= 0x8408; }
else CRC >>= 1;
}

// Видимо то же, что и SM пользует, только для полинома 0x8408:
union {
unsigned Word;
struct {
unsigned char Lo;
unsigned char Hi;
};
}TxCRC;

static void DoCRC (unsigned char Data) {
TxCRC.Lo ^= Data;
TxCRC.Lo ^= (TxCRC.Lo << 4);
Data = TxCRC.Lo ^ (TxCRC.Lo >> 5);
TxCRC.Lo = (Data >> 4)^(TxCRC.Lo << 3) ^ TxCRC.Hi;
TxCRC.Hi = Data;
}

Ну и
/*
Common used polynoms
CCITT-32: 0x04C11DB7
CRC-16: 0x8005
CRC-CCITT: 0x1021
CRC-XMODEM: 0x8408
12bit-CRC: 0x80f
10bit-CRC: 0x233
8bit-CRC: 0x07
*/


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru