ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
64942 Топик полностью
rezident (10.08.2006 14:03, просмотров: 1) ответил РДимка на Ответ: Благодарю!!!! Учил матчасть и к этому же решению пришел!!! Еще раз спасибо!
Можно и без таблицы обойтись, если памяти не хватает. Пример. внутри. 
//===============================================
// Функция подсчета СRC16 по алгоритму
//-----------------------------------------------
//аргументы: указатель на буфер,
//           размер буфера,
//           стартовое значение СRC16
//возвращает:подсчитанное значение СRC16
//ВНИМАНИЕ: Стартовому значению CRC16 необходимо
//          присвоить значение 0xFFFF,
//          размер массива для подсчета CRC16
//          не более 65535 байт
//===============================================
#define _POLINOME_CRC16_  0xA001

xWord f_CRC16Calc(xByte *buf, xWord sizeBuf, xWord crc)
{ xWord i, j;
  for(i=0;i<sizeBuf;i++)
  { crc=crc^buf[i];
    for (j=0;j<8;j++)
    { if ((crc&0x0001)!=0x0000) crc=(crc>>1)^_POLINOME_CRC16_;
      else crc>>=1;
    }
  }
  return (crc);
}
xByte и xWord это типы данных unsigned char и unsigned short соответственно