Расчет CRC с использованием алгоритма среза 8, когда число бит не кратно 8

Я к реализации CRC24C расчета с использованием алгоритма среза по 8. Я успешно реализовал для случая, когда число битов данных кратно 8. Однако, когда количество входных битов не кратно 8, алгоритм среза на 8 не работает. Я планирую разделить биты данных на две части, одна часть содержит # битов данных, кратных 8, а другая часть содержит оставшиеся биты. рассчитать CRC24C индивидуально и объединить его. Однако я не могу найти способ объединить два индивидуально рассчитанных CRC. Любые предложения или идеи будут очень полезны.

0

Решение

Вы можете использовать простую функцию для вычисления первых нескольких и / или последних нескольких бит CRC, в зависимости от того, как ваши данные размещены в памяти. Я не знаю, какой 24-битный CRC вы используете, но для этого:

width=24 poly=0x864cfb init=0xb704ce refin=false refout=false xorout=0x000000 check=0x21cf02 residue=0x000000 name="CRC-24"

этот код C будет обновляться crc с высоким bits биты в младшем байте val:

unsigned crc24_rem(unsigned crc, unsigned val, unsigned bits) {
val &= 0x100 - (0x100 >> bits) ;
crc ^= (unsigned)val << 16;
while (bits--)
crc = crc & 0x800000 ? (crc << 1) ^ 0x864cfb : crc << 1;
crc &= 0xffffff;
return crc;
}

Ты можешь использовать crcany генерировать такой код для любого определения CRC.


0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]