CRC
előállítása táblázattal konyha
nyelven
Táblázatos módszer:
Végy két 256 elemű táblát. Ezekbe a
táblábka helyezz el előre
számolt értékeket. (példákat
kell keresni. pl. AN730).
Az egyik tábla a High (TH), a másik a Low (TL)
Végy három segédváltozót: 1. CBuff,
2. CHigh, 3. CLow
Eljárás:
- A
CRC-zni kívánt adatokból sorban az első
hármat töltsd a segédváltozókba.
- A CBuff tartalmával megcímezzük a TH egyik
elemét
és ezzel XOR kapcsolatba hozzuk a CHigh-t úgy, hogy az
eredmény CHigh-ba kerüljön.
- A CBuff tartalommal megcímezzük a TL egyik elemét
és
ezzel XOR kapcsolatba hozzuk a CLow-t, az eredményt
hasonlóan az előzőhöz, CLow-ba irányítjuk.
- ezután: CHigh -> CBuff, CLow -> CHigh,
következő adatunk -> CLow. Ha nincs következő adatunk a
CLow-ba, akkor ide nullát töltünk. (ez a
végén kétszer fordulhat elő)
- A folyamatot az adataink elfogyásáig
ismételjük.
A végeredmény a CHigh és a CLow, ban kapjuk. Ezt
csatoljuk az elküldendő adataink mögé.
A célban az egész eljárást
megismételjük és a kapott eredményt
összehasonlítjuk az elküldöttel. Egyeznie kell
jó esetben.
Na ennyi :)
Itt a CRC16 szabványos táblázata: (polinom:
x16+x15+x2+1) (forrás AN730)
TH:
dt 0, 0x80, 0x80, 0
dt 0x80, 0, 0, 0x80
dt 0x80, 0, 0, 0x80
dt 0, 0x80, 0x80, 0
dt 0x80, 0, 0, 0x80
dt 0, 0x80, 0x80, 0
dt 0, 0x80, 0x80, 0
dt 0x80, 0, 0, 0x80
dt 0x80, 0, 0, 0x80
dt 0, 0x80, 0x80, 0
dt 0, 0x80, 0x80, 0
dt 0x80, 0, 0, 0x80
dt 0, 0x80, 0x80, 0
dt 0x80, 0, 0, 0x80
dt 0x80, 0, 0, 0x80
dt 0, 0x80, 0x80, 0
dt 0x81, 0x1, 0x1, 0x81
dt 0x1, 0x81, 0x81, 0x1
dt 0x1, 0x81, 0x81, 0x1
dt 0x81, 0x1, 0x1, 0x81
dt 0x1, 0x81, 0x81, 0x1
dt 0x81, 0x1, 0x1, 0x81
dt 0x81, 0x1, 0x1, 0x81
dt 0x1, 0x81, 0x81, 0x1
dt 0x1, 0x81, 0x81, 0x1
dt 0x81, 0x1, 0x1, 0x81
dt 0x81, 0x1, 0x1, 0x81
dt 0x1, 0x81, 0x81, 0x1
dt 0x81, 0x1, 0x1, 0x81
dt 0x1, 0x81, 0x81, 0x1
dt 0x1, 0x81, 0x81, 0x1
dt 0x81, 0x1, 0x1, 0x81
dt 0x83, 0x3, 0x3, 0x83
dt 0x3, 0x83, 0x83, 0x3
dt 0x3, 0x83, 0x83, 0x3
dt 0x83, 0x3, 0x3, 0x83
dt 0x3, 0x83, 0x83, 0x3
dt 0x83, 0x3, 0x3, 0x83
dt 0x83, 0x3, 0x3, 0x83
dt 0x3, 0x83, 0x83, 0x3
dt 0x3, 0x83, 0x83, 0x3
dt 0x83, 0x3, 0x3, 0x83
dt 0x83, 0x3, 0x3, 0x83
dt 0x3, 0x83, 0x83, 0x3
dt 0x83, 0x3, 0x3, 0x83
dt 0x3, 0x83, 0x83, 0x3
dt 0x3, 0x83, 0x83, 0x3
dt 0x83, 0x3, 0x3, 0x83
dt 0x2, 0x82, 0x82, 0x2
dt 0x82, 0x2, 0x2, 0x82
dt 0x82, 0x2, 0x2, 0x82
dt 0x2, 0x82, 0x82, 0x2
dt 0x82, 0x2, 0x2, 0x82
dt 0x2, 0x82, 0x82, 0x2
dt 0x2, 0x82, 0x82, 0x2
dt 0x82, 0x2, 0x2, 0x82
dt 0x82, 0x2, 0x2, 0x82
dt 0x2, 0x82, 0x82, 0x2
dt 0x2, 0x82, 0x82, 0x2
dt 0x82, 0x2, 0x2, 0x82
dt 0x2, 0x82, 0x82, 0x2
dt 0x82, 0x2, 0x2, 0x82
dt 0x82, 0x2, 0x2, 0x82
dt 0x2, 0x82, 0x82, 0x02
TL:
dt 0, 0x5, 0xf, 0xa
dt 0x1b, 0x1e, 0x14, 0x11
dt 0x33, 0x36, 0x3c, 0x39
dt 0x28, 0x2d, 0x27, 0x22
dt 0x63, 0x66, 0x6c, 0x69
dt 0x78, 0x7d, 0x77, 0x72
dt 0x50, 0x55, 0x5f, 0x5a
dt 0x4b, 0x4e, 0x44, 0x41
dt 0xc3, 0xc6, 0xcc, 0xc9
dt 0xd8, 0xdd, 0xd7, 0xd2
dt 0xf0, 0xf5, 0xff, 0xfa
dt 0xeb, 0xee, 0xe4, 0xe1
dt 0xa0, 0xa5, 0xaf, 0xaa
dt 0xbb, 0xbe, 0xb4, 0xb1
dt 0x93, 0x96, 0x9c, 0x99
dt 0x88, 0x8d, 0x87, 0x82
dt 0x83, 0x86, 0x8c, 0x89
dt 0x98, 0x9d, 0x97, 0x92
dt 0xb0, 0xb5, 0xbf, 0xba
dt 0xab, 0xae, 0xa4, 0xa1
dt 0xe0, 0xe5, 0xef, 0xea
dt 0xfb, 0xfe, 0xf4, 0xf1
dt 0xd3, 0xd6, 0xdc, 0xd9
dt 0xc8, 0xcd, 0xc7, 0xc2
dt 0x40, 0x45, 0x4f, 0x4a
dt 0x5b, 0x5e, 0x54, 0x51
dt 0x73, 0x76, 0x7c, 0x79
dt 0x68, 0x6d, 0x67, 0x62
dt 0x23, 0x26, 0x2c, 0x29
dt 0x38, 0x3d, 0x37, 0x32
dt 0x10, 0x15, 0x1f, 0x1a
dt 0xb, 0xe, 0x4, 0x1
dt 0x3, 0x6, 0xc, 0x9
dt 0x18, 0x1d, 0x17, 0x12
dt 0x30, 0x35, 0x3f, 0x3a
dt 0x2b, 0x2e, 0x24, 0x21
dt 0x60, 0x65, 0x6f, 0x6a
dt 0x7b, 0x7e, 0x74, 0x71
dt 0x53, 0x56, 0x5c, 0x59
dt 0x48, 0x4d, 0x47, 0x42
dt 0xc0, 0xc5, 0xcf, 0xca
dt 0xdb, 0xde, 0xd4, 0xd1
dt 0xf3, 0xf6, 0xfc, 0xf9
dt 0xe8, 0xed, 0xe7, 0xe2
dt 0xa3, 0xa6, 0xac, 0xa9
dt 0xb8, 0xbd, 0xb7, 0xb2
dt 0x90, 0x95, 0x9f, 0x9a
dt 0x8b, 0x8e, 0x84, 0x81
dt 0x80, 0x85, 0x8f, 0x8a
dt 0x9b, 0x9e, 0x94, 0x91
dt 0xb3, 0xb6, 0xbc, 0xb9
dt 0xa8, 0xad, 0xa7, 0xa2
dt 0xe3, 0xe6, 0xec, 0xe9
dt 0xf8, 0xfd, 0xf7, 0xf2
dt 0xd0, 0xd5, 0xdf, 0xda
dt 0xcb, 0xce, 0xc4, 0xc1
dt 0x43, 0x46, 0x4c, 0x49
dt 0x58, 0x5d, 0x57, 0x52
dt 0x70, 0x75, 0x7f, 0x7a
dt 0x6b, 0x6e, 0x64, 0x61
dt 0x20, 0x25, 0x2f, 0x2a
dt 0x3b, 0x3e, 0x34, 0x31
dt 0x13, 0x16, 0x1c, 0x19
dt 0x8, 0xd, 0x7, 0x02