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

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 циклов. Может я чего не понимаю, или полиномы неправильные?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
 |
Ответов
|
Sep 4 2006, 08:00
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(_Bill @ Sep 4 2006, 11:41)  Без всякого разжигания религиозной розни хочу заметить, что обращение к таблицам выполняется посредством инструкций call - retlw, в результате чего время выполнения функции существенно увеличивается. В свою очередь замечу, что в AVR обращение к таблицам производится только с использованием регистровой пары Z, что влечет значительные накладные расходы в том случае, если таблица пересекает границу 256 байт. Цитата(_Bill @ Sep 4 2006, 11:41)  Другой неприятностью является необходимость использования стека, размер которого в PIC16 очень небольшой. Очень небольшой, но вполне достаточный для построения любой разумной программы.
|
|
|
|
|
Sep 4 2006, 10:22
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(aaarrr @ Sep 4 2006, 11:00)  Цитата(_Bill @ Sep 4 2006, 11:41)  Без всякого разжигания религиозной розни хочу заметить, что обращение к таблицам выполняется посредством инструкций call - retlw, в результате чего время выполнения функции существенно увеличивается.
В свою очередь замечу, что в AVR обращение к таблицам производится только с использованием регистровой пары Z, что влечет значительные накладные расходы в том случае, если таблица пересекает границу 256 байт. Цитата(_Bill @ Sep 4 2006, 11:41)  Другой неприятностью является необходимость использования стека, размер которого в PIC16 очень небольшой. Очень небольшой, но вполне достаточный для построения любой разумной программы. Накладные расходы невелики и не зависят от расположения таблицы. В AVR отсутствует понятие страницы памяти. Но я говорю, в первую очередь, об увеличении скорости вычислений. А насчет стека могу сказать, что в PIC16 его необходимо расходовать очень экономно. Особенно при использовании прерываний. Поэтому при программировании на PIC16 я старался использовать подпрограммы лишь там, где это действительно было необходимо, например, при доступе к таблицам. В других случаях там, где можно было бы использовать подпрограммы, мне приходилось вставлять фрагменты одного и того же кода. Это неизбежно приводило к разрастанию программного кода. И тогда появлялись другие проблемы, связанные с ипользованием нескольких страниц программной памяти. Ну, да Вам эти проблемы известны не хуже меня.
|
|
|
|
Сообщений в этой теме
=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 aaarrr Цитата(_artem_ @ Sep 3 2006, 20:07) =GM=,... Sep 3 2006, 17:52 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, 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|