Thread Checksum CRC8 Berechnung (5 answers)
Opened by Lauvia at 2015-05-27 12:20

Lauvia
 2015-05-29 16:44
#181213 #181213
User since
2013-09-05
42 Artikel
BenutzerIn
[default_avatar]
Hallo Gwen,

Vielen Dank für dein Stück Code.
Ich habe es getestet und es ist OK. Kann es leider nicht anwenden, da es bedarf eine Installation des Package Digest-CRC auf alle Maschinen (tausende PCs) :-(

Ich habe eine LookUp Table modifiziert, kann damit aber nichts anfangen!

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use strict;
use warnings;



my ($poly, $crc8_initval, $crc8, $i, $j, $fbit, $bitcnt, $data);
my @crc8_table;

$poly        = 0x2F;  # => x^8 + x^5 + x^3 + x^2 + X + 1
$crc8_initval = 0xFF;

@crc8_table = ();

for ($i=0; $i<256; $i++)
{
    $data = $i;
    $crc8  = $crc8_initval;
        
    for($bitcnt = 8; $bitcnt>0; $bitcnt--)
        {
        $fbit = ($crc8 ^ $data) & 0x01;
        if ($fbit == 1)
                {
            $crc8 = $crc8 ^ $poly;
        }

        $crc8 = ($crc8>>1) & 0x7F;

        if ($fbit == 1)
                {
            $crc8 = $crc8 | 0x80;
        }
        $data = $data>>1;
    }
        #printf("crc8[$i] = $crc8\n");
    $crc8_table[$i] = $crc8;
}

#print table as c code:
printf("\n\n");
printf("unsigned char crc8_lookuptable[256] = {");

for($i=0; $i<256; $i+=16)
{
    printf("\n");
    for($j=0; $j<16; $j++)
        {
        printf(" 0x%02X,",$crc8_table[$i+$j]);
    }
}
printf("\n};\n\n");

Anhänge

Last edited: 2015-05-29 16:46:53 +0200 (CEST)

View full thread Checksum CRC8 Berechnung