
Сообщение от
Vslav
crc16_m2() - обычное деление на полином, с вдвиганием бита данных в младший разряд
Насколько я понимаю - деление бита на полином 16 степени требует сдвигания бита на 16 разрядов влево.
Из-за этого, для получения правильного результата деления всех добавленных справа битов - после обрабатываемой последовательности битов приходится пропускать через обработчик ещё 16 "проталкивающих" нулевых битов:
Код:
crc = crc16_m2(crc, 0x00);
crc = crc16_m2(crc, 0x00);
В результате - все добавленные в регистр CRC биты данных делятся на полином именно там, где и должны - в 17-ом бите CRC.