Мда прав си ......е е толкова бързо, но бързината е нещо което може и да се осигури .....
int generate_8bit_crc(char* data, int16 length, int pattern)
{
int *current_data;
int crc_byte;
int16 byte_counter;
int bit_counter;
current_data = data;
crc_byte = *current_data++;
for(byte_counter=0; byte_counter < (length-1); byte_counter++)
{
for(bit_counter=0; bit_counter < 8; bit_counter++)
{
if(!bit_test(crc_byte,7))
{
crc_byte <<= 1;
bit_test(*current_data, 7 - bit_counter) ?
bit_set(crc_byte,0) : bit_clear(crc_byte,0);
continue;
}
crc_byte <<= 1;
bit_test(*current_data, 7 - bit_counter) ?
bit_set(crc_byte,0) : bit_clear(crc_byte,0);
crc_byte ^= pattern;
}
current_data++;
}
for(bit_counter=0; bit_counter < 8; bit_counter++)
{
if(!bit_test(crc_byte,7))
{
crc_byte <<= 1;
continue;
}
crc_byte <<= 1;
crc_byte ^= pattern;
}
return crc_byte;
}
това е С-то
0046: MOVF 32,W
0047: MOVWF 36
.................... crc_byte = *current_data++;
0048: MOVF 36,W
0049: INCF 36,F
004A: MOVWF 04
004B: MOVF 00,W
004C: MOVWF 37
....................
.................... for(byte_counter=0; byte_counter < (length-1); byte_counter++)
004D: CLRF 39
004E: CLRF 38
004F: MOVLW 01
0050: SUBWF 33,W
0051: MOVWF 77
0052: MOVF 34,W
0053: MOVWF 7A
0054: MOVLW 00
0055: BTFSS 03.0
0056: MOVLW 01
0057: SUBWF 7A,F
0058: MOVF 77,W
0059: MOVWF 78
005A: MOVF 39,W
005B: SUBWF 7A,W
005C: BTFSS 03.0
005D: GOTO 0A5
005E: BTFSS 03.2
005F: GOTO 064
0060: MOVF 78,W
0061: SUBWF 38,W
0062: BTFSC 03.0
0063: GOTO 0A5
.................... {
.................... for(bit_counter=0; bit_counter < 8; bit_counter++)
0064: CLRF 3A
0065: MOVF 3A,W
0066: SUBLW 07
0067: BTFSS 03.0
0068: GOTO 0A0
.................... {
.................... if(!bit_test(crc_byte,7))
0069: BTFSC 37.7
006A: GOTO 084
.................... {
.................... crc_byte <<= 1;
006B: BCF 03.0
006C: RLF 37,F
.................... bit_test(*current_data, 7 - bit_counter) ?
.................... bit_set(crc_byte,0) : bit_clear(crc_byte,0);
006D: MOVF 36,W
006E: MOVWF 04
006F: MOVF 00,W
0070: MOVWF 3B
0071: MOVF 3A,W
0072: SUBLW 07
0073: MOVWF 3C
0074: MOVF 3B,W
0075: MOVWF 77
0076: MOVF 3C,W
0077: MOVWF 78
0078: BTFSC 03.2
0079: GOTO 07E
007A: BCF 03.0
007B: RRF 77,F
007C: DECFSZ 78,F
007D: GOTO 07A
007E: BTFSS 77.0
007F: GOTO 082
0080: BSF 37.0
0081: GOTO 083
0082: BCF 37.0
а това съответното АСМ, не е малко .... но .....
едит ; .... абе не е пастнало целия асм код ... ама вече затрих примера
