hedgeov: (Default)
[personal profile] hedgeov
Набрел на такой вот код для подсчета CRC-16 CCITT без таблиц и циклов. Только сдвиги. (отсюда http://www.embeddedrelated.com/groups/msp430/show/29689.php)


void crc_ccitt_init(void)
{
crc = 0xffff;
}

void crc_ccitt_update(unsigned char x)
{
unsigned crc_new = (unsigned char)(crc >> 8) | (crc << 8);
crc_new ^= x;
crc_new ^= (unsigned char)(crc_new & 0xff) >> 4;
crc_new ^= crc_new << 12;
crc_new ^= (crc_new & 0xff) << 5;
crc = crc_new;
}

unsigned int crc_ccitt_crc(void)
{
return crc;
}

Date: 2012-06-04 11:29 am (UTC)
From: [identity profile] blacklion.livejournal.com
Ну, с таблицей, закодированной в сдвигах и масках, на самом деле.
У способа проблема, что быстро для другого полинома его не переписать.
А я вот тут воткнулся, что в доке — CCITT CRC-16, а на деле пришлось разыскивать 5 или 6 разных полиномов и пробовать. какой примет железка. Оказался — не CCITT, хотя обещали его.
Edited Date: 2012-06-04 11:30 am (UTC)

Date: 2012-06-04 11:33 am (UTC)
From: [identity profile] hedgeov.livejournal.com
Понятно же, что под таблицей мною подразумевалось uint16_t coolCRC16Table[256]; :-)
Ну есть проблема, что широко распространены полиномы мало того, что разные, так еще и нифига не оптимальные.

Profile

hedgeov: (Default)
hedgeov

April 2016

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 11th, 2025 05:48 pm
Powered by Dreamwidth Studios