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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Быстрый алгоритм CRC, придумать надо
zombi
сообщение Aug 26 2012, 08:37
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Господа, посоветуйте быстрый алгоритм подсчета CRC блока 32кБ.
CRC16,CRC32...MD5 не подходят из за большого времени счёта.
По быстродействию устраивает одно чтение байта и одна (максимум 2) операция с ним.

Реализовал вот так.
Весь блок рассматриваю как последовательность 8-ми байтных целых чисел и просто их суммирую.
В результате CRC тоже 8-мь байт.
Вопрос: если CRC сделать не восемь а девять или десять байт, будет ли надёжнее?

А может кто то предложит еще какой то быстрый алгоритм?
Go to the top of the page
 
+Quote Post
vvs157
сообщение Aug 26 2012, 10:43
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(zombi @ Aug 26 2012, 12:37) *
Весь блок рассматриваю как последовательность 8-ми байтных целых чисел и просто их суммирую.
В результате CRC тоже 8-мь байт.
Это не совсем CRC, это простая контрольная сумма, которая в отличие от CRC невосприимчива к перестановке байт.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 26 2012, 11:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(zombi @ Aug 26 2012, 11:37) *
А может кто то предложит еще какой то быстрый алгоритм?

"Табличная" реализация расчета CRC имеется в той же Википедии и работает достаточно быстро. Может, вам лучше заменить МК на более производительный ? Или, если позволяет задача, можно подсчитывать CRC "на лету", подавая на вход вычислителя все новые и новые байты по мере их поступления в 32 - килобайтный массив ...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 26 2012, 12:20
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Быстрее и надёжнее стандартного табличного CRC вы вряд ли изобретёте. ИМХО.
Если конечно не будете использовать аппаратный блок микроконтроллера для расчёта CRC как например в STM32.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 26 2012, 12:54
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Процессор 8-разрядный?
Тогда возьмите CRC16 из модбаса, там таблицы для удобства обработки разбиты - отдельно мл. байт отдельно старший.
Go to the top of the page
 
+Quote Post
zombi
сообщение Aug 26 2012, 13:11
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(vvs157 @ Aug 26 2012, 13:43) *
Это не совсем CRC, это простая контрольная сумма, которая в отличие от CRC невосприимчива к перестановке байт.

Ага понял.
Нужно тестить внешнюю флеш на предмет самопроизвольной порчи и правильности монтажа оной.
Не думаю что самопроизвольный сбой может выглядеть как перестановка N-байтных слов.
А вот кз/обрыв по адресу/сам и данным возможен.
Как бы оную быстро и качественно протестить?
Может рассматривать её как посл. челых чисел с нечётным кол-вом байт?

Проц Xmega128. Времени нет на любой CRC.
Go to the top of the page
 
+Quote Post
ae_
сообщение Aug 26 2012, 14:08
Сообщение #7


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(zombi @ Aug 26 2012, 22:11) *
...Проц Xmega128. Времени нет на любой CRC.

Можно сначала заполнить всю тестируемую память данными ПСП (псевдослучайная последовательность), затем сравнить с заново запущенным генератором ПСП.
Для 32кБ хватит 16-бит ПСП, например такой: LFSR
ПСП на LFSR работает быстро: 1 сдвиг + 1 условный XOR.
Проверка всей памяти целиком после её полной записи хороша тем, что обнаруживает ошибки при обрывах/КЗ в адресных линиях, чего не обнаружить, если тестировать по 1-2 байта(write/read/compare) в цикле перебирая адреса.
Go to the top of the page
 
+Quote Post
zombi
сообщение Aug 26 2012, 15:13
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ae_ @ Aug 26 2012, 17:08) *
Можно сначала заполнить всю тестируемую память данными ПСП ...

Проц внешнюю флеш может только читать!
Он должен протестировать то что ему подсунули.
И либо работать с этими данным либо ругаться.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Aug 26 2012, 15:31
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(zombi @ Aug 26 2012, 17:11) *
Нужно тестить внешнюю флеш на предмет самопроизвольной порчи и правильности монтажа оной.
Для этого простой контрольной суммы действительно достаточно.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 26 2012, 15:42
Сообщение #10


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (zombi @ Aug 26 2012, 22:11) *
Времени нет на любой CRC.

А что такое время в Вашем случае? Как много его есть, и сколько можно использовать для подсчета КС? Вот Вы суммируете. А по таблице дольше вычислять? А надежность? Надежность CRC подтверждена математически? А надежность суммирования для случая проверки флеша?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zombi
сообщение Aug 26 2012, 16:26
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(haker_fox @ Aug 26 2012, 18:42) *
А что такое время в Вашем случае? Как много его есть, и сколько можно использовать для подсчета КС?

Чем быстрее тем лучше. Проц работает на 32MHz но всего лишь 5-10% времени он может уделить для тестирования флешки.
Тест 512-ти областей по 32кБ (16МВ) с подсчётом CRC32 (по табличному алг.) идёт примерно 2 минуты и это ужасно долго!
Тоже самое с КС 20 сек, красота!

Цитата(haker_fox @ Aug 26 2012, 18:42) *
Вот Вы суммируете. А по таблице дольше вычислять?

Суммирую 0-й байт флеш с 0-м бaйтом KC, второй со вторым с учётом переноса и т.д. (всего одно чтение и одно сложение на байт).
CRC32 - прочитать байт, загрузить указатель таблицы, сложить, сдвинуть ... (врядли в две команды хватит).

Цитата(haker_fox @ Aug 26 2012, 18:42) *
А надежность? Надежность CRC подтверждена математически? А надежность суммирования для случая проверки флеша?

laughing.gif
Go to the top of the page
 
+Quote Post
Plain
сообщение Aug 26 2012, 16:30
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Цитата(zombi @ Aug 26 2012, 11:37) *
устраивает одно чтение байта и одна (максимум 2) операция с ним

Например, сложение и циклический сдвиг.
Go to the top of the page
 
+Quote Post
zombi
сообщение Aug 26 2012, 16:40
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(vvs157 @ Aug 26 2012, 18:31) *
Для этого простой контрольной суммы действительно достаточно.

Надеюсь.
На всяк. случай алгоритм несколько поменял:
КС сделал 7-ми байтной и сложение заменил на XOR.

Цитата(Plain @ Aug 26 2012, 19:30) *
Например, сложение и циклический сдвиг.

Циклический сдвиг чего?
Одного байта результата сложения? или всей КС?
Go to the top of the page
 
+Quote Post
Plain
сообщение Aug 26 2012, 16:57
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Если нужно просто убедиться в целости линий адресов и данных, то достаточно пройти память по диагонали, т.е. 4 КБ.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 26 2012, 16:59
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(zombi @ Aug 26 2012, 16:11) *
Проц Xmega128. Времени нет на любой CRC.

xmegaA или другая ? Есть ли у неё Crypto Engine?
Врядли конечно будет быстрее, по вдруг...
Если есть блок шифрования то нельзя ли выполнить команду DES? Но что-то не могу найти сколько циклов она выполняется, врядли 1.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 21:58
Рейтинг@Mail.ru


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