[an error occurred while processing this directive]
|
вижу алгоритм вычисления CRC. Вижу, что какой-то он нестандартный, или это у меня в голове глюк? Но по-моему ТАК CRC не вычисляют (по-крайней мере в классике)
Перевод на русский язык с ассемблера 51:
вычисляем на ходу при приеме/передаче данных по УАРТ (тут все пока честно)
начальное значение = 0х0000
образующий полином = 0х1021 (тожа пока все честно)
затем пошел алгоритм - по байту берем и вычисляем
1. операция xor между новым байтом (byte) и старшим байтом CRC (crc_h) - получаем некий индекс (index)
2. на основании index (индекс массива) из таблицы берем табличный старший байт (table_h)
3. делаем операцию xor между table_h и младшим байтом CRC (crc_l). Полученный результат кладем в crc_h
4. На основе index из таблицы берем табличный младший байт (table_l) и кладем его в младший байт CRC (crc_l).
И так пока байты (byte) не кончатся. Короче я всегда считал, что любой алгоритм хоть побитовый, хоть табличный, работает по принципу сдвига данных, причем новые данные вдвигаются в буфер CRC, а старые - выдвигаются из него и на основании выдвинутых данных производятся действия по xor.
Выскажитесь пожалуйста по-существу вопроса, а то я понимаю, что этот чужой код идеологически неверен, но берут сомнения в своей правоте.
E-mail: info@telesys.ru