problem med crc8
jeg forsøger at lave en crc8 checksum på en serial forbindelse mellem et c# .net mf kit og et 8051 kitjeg har ikke den store kendskab inden for crc så har derfor fundet et eksempel i C# som jeg kunne bruge:
public static class Crc8 {
static byte[] table = new byte[256];
// x8 + x7 + x6 + x4 + x2 + 1
const byte poly = 0xd5;
public static byte ComputeChecksum(params byte[] bytes ) {
byte crc = 0;
if ( bytes != null && bytes.Length > 0 ) {
foreach ( byte b in bytes ) {
crc = table[crc ^ b];
}
}
return crc;
}
static Crc8( ) {
for ( int i = 0; i < 256; ++i ) {
int temp = i;
for ( int j = 0; j < 8; ++j ) {
if ( ( temp & 0x80 ) != 0 ) {
temp = ( temp << 1 ) ^ poly;
} else {
temp <<= 1;
}
}
table[i] = (byte)temp;
}
}
}
Denne komde ser ud til at virke fint, men når jeg forsøger at konvertere koden til C, er det som om der går noget galt.... jeg får ikke den samme checksum som i c# og hvis jeg prøver at printe tabellen ud på mit display til 8051 kittet kan jeg se slet ikke indeholder det samme som c# modellen
min C kode ser pt. sådan ud:
void createtable()
{
unsigned int poly = 0xD5;
for(i = 0; i < 256; i++)
{
unsigned int temp = i;
for(j = 0; j < 8; j++)
{
if((temp & 0x80) != 0)
{
temp = (temp << 1) ^ poly;
}
else {
temp <<= 1 ;
}
table[i] = (unsigned int)temp;
cursor(1,1);
printf("value %u", temp);
for(j=0; j < 40000; j++);
}
}
}
unsigned char computechecksum(unsigned char hej[4]){
unsigned char crc = 0;
if(hej != 0)
{
for(i = 0; i < 4; i++)
{
crc = table[crc ^ hej[i]];
cursor(2,1);
printf("table value %X",crc);
for(j=0; j< 20000; j++);
}
return crc;
}
}
håber der er nogen der kan hjælpe mig til at se hvad der er galt...