Расчет CRC16
- Войдите на сайт для отправки комментариев
Вс, 08/02/2015 - 00:24
Уважаемые формумчане поделитесь примером расчета контрольной суммы CRC16.
Уважаемые формумчане поделитесь примером расчета контрольной суммы CRC16.
http://ru.wikibooks.org/wiki/Реализации_алгоритмов/Циклический_избыточный_код#CRC-16
Спасибо !
Скорректировал немного и добавил комментарии.
Пример 3-х разных алгоритмов расчёта CRC16-MODBUS (полином 0xA001).
Время работы на ATmega16 @ 16 МГц:
Данные: "123456789"
Ключ: -O1
GetCrc16Table() - 13.3 мкс
GetCrc16Simple() - 20.0 мкс
GetCrc16Cycle() - 57.5 мкс
Данные: массив, размером 256 байт
Ключ: -O1
GetCrc16Table() - 0.35 мсек
GetCrc16Simple() - 0.53 мсек
GetCrc16Cycle() - 1.6 мсек
Время работы на ATmega16 @ 16 МГц:
Данные: "123456789"
Ключ: -O1
GetCrc16Table() - 13.3 мкс
GetCrc16Simple() - 20.0 мкс
GetCrc16Cycle() - 57.5 мкс
Данные: массив, размером 256 байт
Ключ: -O1
GetCrc16Table() - 0.35 мсек
GetCrc16Simple() - 0.53 мсек
GetCrc16Cycle() - 1.6 мсек
что-то ерунда какая-то - массив из 9 элементов считается в 40 раз дольше, чем массив из 256 ? - может просто данные местами перепутали?
что-то ерунда какая-то - массив из 9 элементов считается в 40 раз дольше, чем массив из 256 ? - может просто данные местами перепутали?
мкс - микросекунды, мс - миллисекунды.
GetCrc16Simple() ближе по быстродействию к табличному, но не требует для работы таблицы. Можно сэкономить на памяти ОЗУ или флеш.
мкс - микросекунды, мс - миллисекунды.
прошу прощения, не заметил
Проверка кода: https://godbolt.org/z/9txEB2
Более быстрый алгоритм для CRC16/MODBUS (0xA001) из библиотеки avrlibc:
Полный набор из 4-х методов: crc16-modbus.pdf
Полный набор из 4-х методов: crc16-modbus.pdf
Извините, возникла проблема
Код ошибки: 2C171/1
Может подскажите как прикрепить любой файл здесь?