Re: CRC-16, вычисление lookup таблицы для полинома 8005
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 25.06.09 14:00
Оценка:
Здравствуйте, dlk, Вы писали:

dlk>А вот в секции "Пример программы табличного (быстрого) расчёта стандартного (ARC) CRC-16 на языке Си" для полинома:

dlk> Poly : 0x8005 x^16 + x^15 + x^2 + 1
dlk>таблица должна быть:
dlk>
dlk>const unsigned short Crc16Table[256] = {
dlk>    0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
dlk>

dlk>У меня же начало таблицы выглядит так
dlk>
dlk>  0x0000, 0x8005, 0x800F ....
dlk>

dlk>Причем, в силу особенностей приведенной функции для вычисления таблицы, второй элемент в таблице всегда должен быть равен полиному (в данном случае 0x8005), потому я в принципе не понимаю, почему же в примере из википелии второй элемент таблицы равен 0xC0C1. CRC, выполненное по моей таблице, не принимается устройством, а вычисленное по таблице из википедии — принимается.

Скорее всего разница в том, что в википедии названо RefIn. Для линий связи принято начинать с младшего бита.

dlk>При всем при этом для полинома 0x1021 таблица вычисляется правильно.

dlk>Правда, для полинома 8005 в википедии написано "Revert: true", но куда мне это приткнуть, я не понимаю...

В программу, вестимо.:)) Или сдвигать влево и брать самый левый до сдвига, или сдвигать вправо и брать младший бит.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.