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

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

Отправлено ase 18 июня 2004 г. 15:47
В ответ на: Ответ: отправлено ase 18 июня 2004 г. 15:41

Сразу выложу исходник, вдруг сгодится;) Если надо, могу другие полиномы рассчитать в Си-код...
/******************************************************************************/
/* Algorithm title: CRC32 - PKZIP,AUTODIN II,Ethernet,FDDI */
/* Polynomial string: x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 */
/* Polynomial factor: 0x4C11DB7 (79764919 as decimal) */
/* Width: 32 */
/* Type of polynomial: Reversed */
/* Initial value: 0xFFFFFFFF */
/* Final XOR: 0xFFFFFFFF */
/******************************************************************************/
#define __MEM_ATTR const

__MEM_ATTR unsigned long CrcLookup[16]= {
0x00000000, 0x1DB71064, 0x3B6E20C8, 0x26D930AC,
0x76DC4190, 0x6B6B51F4, 0x4DB26158, 0x5005713C,
0xEDB88320, 0xF00F9344, 0xD6D6A3E8, 0xCB61B38C,
0x9B64C2B0, 0x86D3D2D4, 0xA00AE278, 0xBDBDF21C
};

#define CrcNextNibble( CrcReg,NewData ) \
(unsigned long)((CrcReg>>4) ^ CrcLookup[(CrcReg^(NewData)) & 0xF])

unsigned long CrcCalculate( unsigned char *ptr,unsigned short len )
{
register unsigned long CrcReg;

CrcReg= 0xFFFFFFFF;
while( len-- != 0 ) {
CrcReg= CrcNextNibble( CrcReg,*ptr );
CrcReg= CrcNextNibble( CrcReg,(*ptr++)>>4 );
}/*while*/
CrcReg^= 0xFFFFFFFF;
return CrcReg;
}/*CrcCalculate*/

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

Ответы



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

E-mail: info@telesys.ru