Отговори на тема  [ 16 мнения ]  Отиди на страница Предишна  1, 2
CRC8 калкулатор 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Мда прав си ......е е толкова бързо, но бързината е нещо което може и да се осигури .....
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

а това съответното АСМ, не е малко .... но .....

едит ; .... абе не е пастнало целия асм код ... ама вече затрих примера :)


Чет Дек 30, 2004 1:30 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни