реклама на сайте
подробности

 
 
> Быстрое вычисление CRC-8, Потенциальные возможности не табличных методов
=GM=
сообщение Sep 1 2006, 12:32
Сообщение #1


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Недавно поднимался вопрос об оптимизации сишного кода, в частности был представлен такой код (немного отрихтовал для приличия)
Цитата(µµC @ Aug 25 2006, 14:26) *
Приятный алгоритм, возьму на вооружение. IAR - 515 циклов.
Код
U8 crc8_3(U8 *buff, U8 num)
{
U8 i, crc=0;
do
{
  crc^=*buff++;
   i=8;
   do
   {  
     if(crc&0x01)
     {
       crc>>=1;
       crc^=0x8C;
     }
     else crc>>=1;
   }
  } while(--i);  
} while(--num);
return crc;
}

Для семи байтов ИАР-код выполняется за 525 циклов, т.е. вгрубе 75 циклов на байт.
У меня весь ASM-код (не табличный) для 7 байт выполняется за 80 циклов. Может я чего не понимаю, или полиномы неправильные?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Sep 3 2006, 17:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_artem_ @ Sep 3 2006, 20:07) *
=GM=, по моему небольшая ошибка есть кроме той на которую указал Oldring. В каждом sbrc , кроме того, который проверяет нулевой бит, вам надо поменять номер бита в возрастаюшем порядке, по которому вы проверяете установлен ли бит или нет.

удачи.

А если присмотреться повнимательнее, обнаруживается, что выставленный на суд общественности код в принципе нерабочий smile.gif

Вот вариант с полубайтовыми таблицами для AVR:
Код
    Указатель на начало буфера - Y,
    длина - e.
    Результат возвращается в c

crc8:
    ldi    ZH, high(crc8_tba * 2)
    ldi    c, 0x00
crc8_0:
    ld     a, Y+
    eor    a, c
    mov    ZL, a
    swap   ZL
    andi   ZL, 0x0f
    lpm
    mov    c, r0
    mov    ZL, a
    andi   ZL, 0x0f
    ori    ZL, 0x10
    lpm
    eor    c, r0
    dec    e
    brne   crc8_0
    ret


    .org    0xf00

crc8_tba:
    .db    0x00, 0x9d
    .db    0x23, 0xbe
    .db    0x46, 0xdb
    .db    0x65, 0xf8
    .db    0x8c, 0x11
    .db    0xaf, 0x32
    .db    0xca, 0x57
    .db    0xe9, 0x74

crc8_tbb:
    .db    0x00, 0x5e
    .db    0xbc, 0xe2
    .db    0x61, 0x3f
    .db    0xdd, 0x83
    .db    0xc2, 0x9c
    .db    0x7e, 0x20
    .db    0xa3, 0xfd
    .db    0x1f, 0x41


и PIC16:
Код
    FSR - Адрес
    tmp0 - количество данных

crc8
    movlw   high(crc_tba)
    movwf   PCLATH
    clrf    tmp1
crc8_0
    movf    tmp1, w
    xorwf   INDF, w
    movwf   tmp2
    andlw   0fh
    call    crc_tbb
    movwf   tmp1
    swapf   tmp2, w
    andlw   0fh
    call    crc_tba
    xorwf   tmp1, f
    incf    FSR, f
    decfsz  tmp0, f
    goto    crc8_0
    return

crc_tba
    addwf    PCL, f
    dt    00h, 9dh, 23h, 0beh, 46h, 0dbh, 65h, 0f8h
    dt    8ch, 11h, 0afh, 32h, 0cah, 57h, 0e9h, 74h

crc_tbb
    addwf    PCL, f
    dt    00h, 5eh, 0bch, 0e2h, 61h, 3fh, 0ddh, 83h
    dt    0c2h, 9ch, 7eh, 20h, 0a3h, 0fdh, 1fh, 41h


В порядке разжигания религиозной розни замечу, что код для PIC'a получается гораздо эстетичнее за счет более красивой реализации работы с таблицами.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- =GM=   Быстрое вычисление CRC-8   Sep 1 2006, 12:32
- - IgorKossak   =GM=, почитайте внимательно о методах оптимизации ...   Sep 1 2006, 12:54
|- - =GM=   Цитата(IgorKossak @ Sep 1 2006, 11:54) =G...   Sep 1 2006, 13:59
|- - singlskv   Цитата(=GM= @ Sep 1 2006, 17:59) Цитата(I...   Sep 1 2006, 15:11
- - pitt   Код для onewire от Texas Instruments avr-gcc. Пере...   Sep 1 2006, 12:56
- - aaarrr   Цитата(=GM= @ Sep 1 2006, 16:32) У меня в...   Sep 1 2006, 14:08
|- - =GM=   Цитата(aaarrr @ Sep 1 2006, 13:08) Цитата...   Sep 1 2006, 15:17
|- - singlskv   Цитата(=GM= @ Sep 1 2006, 19:17) Цитата(a...   Sep 1 2006, 15:21
|- - =GM=   Цитата(singlskv @ Sep 1 2006, 14:21) Пере...   Sep 1 2006, 16:33
|- - singlskv   Цитата(=GM= @ Sep 1 2006, 20:33) Но это т...   Sep 1 2006, 20:37
|- - =GM=   Цитата(singlskv @ Sep 1 2006, 19:37) Ну н...   Sep 3 2006, 08:55
|- - Oldring   Цитата(=GM= @ Sep 3 2006, 12:55) Код sbrc...   Sep 3 2006, 10:16
||- - pitt   Цитата(Oldring @ Sep 3 2006, 06:16) Ускор...   Sep 3 2006, 12:23
|||- - ivstech   Вот мой код расчета CRC16, не скажу, что я придум...   Sep 4 2006, 05:11
|||- - Oldring   Цитата(ivstech @ Sep 4 2006, 09:11) Вот м...   Sep 4 2006, 11:07
||- - =GM=   Цитата(Oldring @ Sep 3 2006, 09:16) Цитат...   Sep 3 2006, 20:31
||- - Oldring   Цитата(=GM= @ Sep 4 2006, 00:31) Oldring,...   Sep 3 2006, 20:44
||- - singlskv   Цитата(Oldring @ Sep 4 2006, 00:44) Цитат...   Sep 3 2006, 21:28
||- - =GM=   Цитата(Oldring @ Sep 4 2006, 00:44) Это т...   Sep 5 2006, 12:28
|- - _artem_   Цитата(=GM= @ Sep 3 2006, 11:55) Цитата(s...   Sep 3 2006, 16:07
- - pitt   Чего я не понял, так это мы о скорости говорим или...   Sep 1 2006, 17:28
|- - singlskv   Цитата(pitt @ Sep 1 2006, 21:28) Или цена...   Sep 1 2006, 20:10
|- - Oldring   Цитата(aaarrr @ Sep 3 2006, 21:52) А если...   Sep 3 2006, 19:13
|- - _Bill   Цитата(aaarrr @ Sep 3 2006, 20:52) В поря...   Sep 4 2006, 07:41
- - Oldring   Для тех кто интересуется добавлю, что рассматривае...   Sep 3 2006, 22:22
- - aaarrr   Цитата(_Bill @ Sep 4 2006, 11:41) Без вся...   Sep 4 2006, 08:00
|- - _Bill   Цитата(aaarrr @ Sep 4 2006, 11:00) Цитата...   Sep 4 2006, 10:22
- - aaarrr   Цитата(_Bill @ Sep 4 2006, 14:22) Накладн...   Sep 4 2006, 11:31
|- - Oldring   Цитата(aaarrr @ Sep 4 2006, 15:31) Цитата...   Sep 4 2006, 11:51
|- - _Bill   Цитата(aaarrr @ Sep 4 2006, 14:31) Как эт...   Sep 4 2006, 12:33
- - aaarrr   Цитата(Oldring @ Sep 4 2006, 15:51) Завис...   Sep 4 2006, 12:09
- - aaarrr   Цитата(_Bill @ Sep 4 2006, 16:33) Поэтому...   Sep 4 2006, 13:06
|- - _Bill   Цитата(aaarrr @ Sep 4 2006, 16:06) Цитата...   Sep 4 2006, 13:13
- - Smen   Дяденьки, подскажите, плиз! Если у меня прини...   Jul 1 2013, 13:37
- - zombi   Цитата(Smen @ Jul 1 2013, 16:37) какой ал...   Jul 1 2013, 19:01
- - Smen   Цитата(zombi @ Jul 1 2013, 23:01) Считайт...   Jul 2 2013, 06:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016