Проверка работы функции CRC (8, 16, 32, 64) ON-LINE

При отладке работы функции можно воспользоваться вот этим удобным калькулятором.

CRC-16
/*
  Name  : CRC-16 CCITT
  Poly  : 0x1021    x^16 + x^12 + x^5 + 1
  Init  : 0xFFFF
  Revert: false
  XorOut: 0x0000
  Check : 0x29B1 ("123456789")
  MaxLen: 4095 байт (32767 бит) - обнаружение
    одинарных, двойных, тройных и всех нечетных ошибок
*/
uint16_t crc16(uint8_t *adrBuff, uint16_t len)
{
  uint16_t crc = 0xFFFF;
  unsigned char i;

  while (len--)
  {
    crc ^= *adrBuff++ << 8;
    for (i = 0; i < 8; i++)
      crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
  }
  return crc;
}
1 лайк

А зачем её отлаживать? Чем плоха системная? Пишете

#include <util/crc16.h>

и пользуете.

Там есть CRC для разных протоколов, не только для CCITT, но и для iButton, и для xModem.

С ними что-то не так?

наверное ничем не плоха, но сей предмет не входил в область моих понятий )))
и второе, такая же функция нужна и на php )))
PS Кстати, как я понял моего алгоритма там нет, если полином совпадает, не совпадает Init… и я RP2040W играюсь
ЗЗЫ util/crc16.h: No such file or directory

Обычно если железяка использует CRC, то в документации на эту железяку есть код по которому его стоит вычислять.
Предпочитаю этот код и использовать.
А то у них то полиномы свои, то биты развернуты …

я эту железяку сам проектирую )))

Чего уж тут…
Помнится, не так давно Рида-Соломона проверяли: Передача данных с коррекцией ошибок | Аппаратная платформа Arduino