Witam.
Przeczytałem mini kurs o CRC w Elektronice Praktycznej oraz informacje na tej stronie www.avrtutor.com > CRC jednak mam problemy z napisaniem swojej funkcji.
Z tego co zrozumiałem z EP, bity w rejestrze (na skrót CRC) oraz bity z bajtu danych przesuwam w lewo, co utrudnia mi sprawę (dopiero zaczynam z C). Na tej stronie bit który ustala czy xor-ujemy to pierwszy bit "feedback = ((seed ^ input) & 0x01)". No i przesunięcia są w prawo! O co chodzi? Nic nie mogę skumać..
Liczenie CRC chce wykorzystać do pracy z termometrem 1-wire DS18B20, gdzie wielomian = x^8 + x^5 + x^4 + 1
Coś takiego ma prawo działać?
Przeczytałem mini kurs o CRC w Elektronice Praktycznej oraz informacje na tej stronie www.avrtutor.com > CRC jednak mam problemy z napisaniem swojej funkcji.
Z tego co zrozumiałem z EP, bity w rejestrze (na skrót CRC) oraz bity z bajtu danych przesuwam w lewo, co utrudnia mi sprawę (dopiero zaczynam z C). Na tej stronie bit który ustala czy xor-ujemy to pierwszy bit "feedback = ((seed ^ input) & 0x01)". No i przesunięcia są w prawo! O co chodzi? Nic nie mogę skumać..
Liczenie CRC chce wykorzystać do pracy z termometrem 1-wire DS18B20, gdzie wielomian = x^8 + x^5 + x^4 + 1
Coś takiego ma prawo działać?
#define CRC8_POLY 0x31
unsigned char crc8(unsigned char data)
{
unsigned char i, feedback, crc8;
crc8 = 0x00;
for(i = 0; i < 8; i++}
{
feedback = (CRC8_POLY ^ data) & 0x01;
if(!feedback) // if not feedback
{
crc8 >>= 1;
} else // if feedback
{
crc8 ^= CRC8_POLY;
crc8 >>= 1;
crc8 |= 0x80;
}
data >>= 1;
}
return crc8;
}