| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вычисление контрольной суммы |
| Автор: AntonN 8.8.2006, 16:52 |
| Всем Привет! У меня проблема с вычислением CRC16. Есть небольшое объяснение и примеры, но как они получились не понимаю.... CRC is calculated over data bytes of the message (start and end of message characters are excluded). CRC is initialised to 0000. Two examples of messages with checksum: CRC-16: 1A 32 12 34 56 0D 38 43 1A 33 12 34 56 0D 39 BF 1 и 6 байты не считаются... т.е. из 32 12 34 56 сумма получается 38 43 Есть еще программа на ассемблере которая вычисляет эту сумму, но, к сожалению, его я не знаю... Here is our crc-program (Motorola 6809 assembly language) *********************************************** CRC_O EQU * program updates crc-sum * CRC_D (2 bytes) with character in A-reg. CRC_G EQU $A001 *********************************************** DSCT CRC_D RMB 2 crc-sum PSCT PSHS D,X * char to stack PSHS A * crc to D LDD CRC_D LDX #8 REPEAT LSRA msb of crc EORB S char BITB #1 IF <EQ> THEN.S * b0s same before shift EORB S restore of B RORB ELSE.S * b0s not same before shift EORB S restore of B RORB EORA #CRC_G!>8 EORB #CRC_G!.$FF ENDI LSR S char LEAX -1,X UNTIL <EQ> * char has been processed STD CRC_D LEAS 1,S PULS D,X,PC * 8*35+44(+JSR) us 324(+JSR) us Помогите, плиз, ОООЧЕНЬ надо... Заранее благодарен, Антон |
| Автор: _hunter 8.8.2006, 17:02 |
| дык помогти с чем? и при чем тут C/C++ |
| Автор: MAKCim 8.8.2006, 17:07 | ||
судя по всему с asm-а на С/С++ перевести |
| Автор: _hunter 8.8.2006, 17:21 |
| дык это даже не асм... |
| Автор: dumb 8.8.2006, 17:24 |
| это асм, только мотороловский.. ;) AntonN, четвертую тему в "А здесь смотрели?"(внизу) посмотри. |
| Автор: Mayk 8.8.2006, 17:24 |
забавный синтаксис. Добавлено @ 17:25 не успел! /me опередили. |
| Автор: Fin 8.8.2006, 17:27 | ||
На одном из сайтов (Помоему Алголист), я видел такой алгоритм подсчета CRC32
Добавлено @ 17:30 ОПс не заметил, что парню нужно CRC16. Добавлено @ 17:41 Вот ссылочка http://algolist.manual.ru/compress/index.php. Внизу страници есть ссылочка на книгу в формате PDF "Элементарное руководство по CRC-алгоритмам обнаружения ошибок" Весит 165 килобайт. |
| Автор: AntonN 9.8.2006, 14:11 | ||
Спасибо... Книгу читал, но итоговая сумма получается неверной... В файле показан мой процесс вычисления... Может, в чем-то не прав? ИМХО у них алгоритм какой-то другой... Для этого ассемблеровский код и выложил.... Заранее благодарен, Антон |
| Автор: AntonN 10.8.2006, 14:05 |
| Неужели никто не сможет мне помочь??? В zip-у вирусов нет, не бойтесь.... Хотел выложить .doc-овский файл, но вылезла ошибка о том, что данный тип файла не может быть прикреплен.... Заранее благодарен, Антон |
| Автор: _hunter 10.8.2006, 14:27 |
| помочь с чем? -- в сети порядочно алгоритмов CRC16. реализуй два и сравни с твоим -- будет понятно кто не прав. + попробуй проинвертировать сумму... |
| Автор: dumb 10.8.2006, 16:14 | ||||
в общем, пару упрощений они сделали. использовать примерно так:
|
| Автор: AntonN 11.8.2006, 13:22 | ||||||
Dumb, спасибо большое! Все работает.... Осталось только разобраться как.... Антон |
| Автор: jonie 11.8.2006, 22:35 | ||
| не в тему (но всеже о том) генерировал когда-то давно, когда надо было для CRC32 таблицу сам (уж больно ломает меня писать этот массивчик ручками, да и зачем...) это для CRC32 (asm)
не оптимизированно толком (ибо не тут и надо скорость выжимать ессно).... но вроде работало кстати аналогично можно и для CRC16 сделать... принцип любой цикличной суммы одинаков.. хоть crc128 берите.... а код... писалось давно и неправда) |