Цитата
А можно просто в двух словах изложить алгоритм подсчета, как он делается...
К сожалению я не знаю алгоритм, сам выдрал пример из инета.
На всякий случай даю дизассемблированный текст, то что для меня создал IAR:
Код
crc_table:
\ 00000000 5E00E2BC3F61 DB 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31
\ 83DD9CC2207E
\ FDA31F
\ 0000000F 9D4121C3FC7F DB 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96
\ 40A25F1EE301
\ 3EBD60
\ 0000001E DC827D23C19F DB 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128
\ 1C42A0FEBFE1
\ 035D80
\ 0000002D 3CDEBE6202E0 DB 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158
\ DF5C63817C3D
\ C0229E
\ 0000003C 431DFFA11846 DB 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56
\ A4FA7927C59B
\ DA8438
\ 0000004B E56659BBDB07 DB 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71
\ 6785BA3906E4
\ 195847
\ 0000005A FBA526789AC4 DB 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167
\ 3B6587D95A04
\ E6B8A7
\ 00000069 1BF9C6457A98 DB 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123
\ F82444A6991A
\ 25C77B
\ 00000078 643AD886055B DB 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81
\ B9E7D28C6E30
\ B3ED51
\ 00000087 4E0FF2102FAC DB 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46
\ 937111CDAD4F
\ 70F32E
\ 00000096 92CC8DD3316F DB 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206
\ ECB2500EF1AF
\ 4D13CE
\ 000000A5 72906D2CD133 DB 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208
\ 0C8FB05232EE
\ 8E6CD0
\ 000000B4 0D53B1EFAEF0 DB 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118
\ 124CCF91732D
\ 94CA76
\ 000000C3 AB2817F50849 DB 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235
\ B45669EAD537
\ 578BEB09
\ 000000D3 36B58A6895D4 DB 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233
\ 29CBF47748AA
\ E916
\ 000000E1 55B7880B34D6 DB 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168
\ 2B6A97754AC9
\ F614A8
\ 000000F0 2A7496C84B15 DB 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107
\ F7A9E8B6540A
\ 89D76B
\ 000000FF 35 DB 53
12 0x00,0x5E,0xBC,0xE2,0x61,0x3F,0xDD,0x83,0xC2,0x9C,0x7E,0x20,0xA3,0xFD,0x1F,
0x41,
13 0x9D,0xC3,0x21,0x7F,0xFC,0xA2,0x40,0x1E,0x5F,0x01,0xE3,0xBD,0x3E,0x60,0x82,
0xDC,
14 0x23,0x7D,0x9F,0xC1,0x42,0x1C,0xFE,0xA0,0xE1,0xBF,0x5D,0x03,0x80,0xDE,0x3C,
0x62,
15 0xBE,0xE0,0x02,0x5C,0xDF,0x81,0x63,0x3D,0x7C,0x22,0xC0,0x9E,0x1D,0x43,0xA1,
0xFF,
16 0x46,0x18,0xFA,0xA4,0x27,0x79,0x9B,0xC5,0x84,0xDA,0x38,0x66,0xE5,0xBB,0x59,
0x07,
17 0xDB,0x85,0x67,0x39,0xBA,0xE4,0x06,0x58,0x19,0x47,0xA5,0xFB,0x78,0x26,0xC4,
0x9A,
18 0x65,0x3B,0xD9,0x87,0x04,0x5A,0xB8,0xE6,0xA7,0xF9,0x1B,0x45,0xC6,0x98,0x7A,
0x24,
19 0xF8,0xA6,0x44,0x1A,0x99,0xC7,0x25,0x7B,0x3A,0x64,0x86,0xD8,0x5B,0x05,0xE7,
0xB9,
20 0x8C,0xD2,0x30,0x6E,0xED,0xB3,0x51,0x0F,0x4E,0x10,0xF2,0xAC,0x2F,0x71,0x93,
0xCD,
21 0x11,0x4F,0xAD,0xF3,0x70,0x2E,0xCC,0x92,0xD3,0x8D,0x6F,0x31,0xB2,0xEC,0x0E,
0x50,
22 0xAF,0xF1,0x13,0x4D,0xCE,0x90,0x72,0x2C,0x6D,0x33,0xD1,0x8F,0x0C,0x52,0xB0,
0xEE,
23 0x32,0x6C,0x8E,0xD0,0x53,0x0D,0xEF,0xB1,0xF0,0xAE,0x4C,0x12,0x91,0xCF,0x2D,
0x73,
24 0xCA,0x94,0x76,0x28,0xAB,0xF5,0x17,0x49,0x08,0x56,0xB4,0xEA,0x69,0x37,0xD5,
0x8B,
25 0x57,0x09,0xEB,0xB5,0x36,0x68,0x8A,0xD4,0x95,0xCB,0x29,0x77,0xF4,0xAA,0x48,
0x16,
26 0xE9,0xB7,0x55,0x0B,0x88,0xD6,0x34,0x6A,0x2B,0x75,0x97,0xC9,0x4A,0x14,0xF6,
0xA8,
27 0x74,0x2A,0xC8,0x96,0x15,0x4B,0xA9,0xF7,0xB6,0xE8,0x0A,0x54,0xD7,0x89,0x6B,
0x35};
28
29 //Вычисляет и возвращает crc8
\ In segment CODE, align 2, keep-with-next
30 void do_crc_8(unsigned char byte, unsigned char *crc8)
\ do_crc_8:
31 {
32 *crc8=crc_table[(*crc8^byte)];
\ 00000000 .... LDI R20, LOW(crc_table)
\ 00000002 .... LDI R21, (crc_table) >> 8
\ 00000004 01F9 MOVW R31:R30, R19:R18
\ 00000006 8160 LD R22, Z
\ 00000008 E010 LDI R17, 0
\ 0000000A 2706 EOR R16, R22
\ 0000000C 0F40 ADD R20, R16
\ 0000000E 1F51 ADC R21, R17
\ 00000010 01FA MOVW R31:R30, R21:R20
\ 00000012 9104 LPM R16, Z
\ 00000014 01F9 MOVW R31:R30, R19:R18
\ 00000016 8300 ST Z, R16
33 }
\ 00000018 9508 RET