Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Как вычислить CRC16   Найти похожие ветки 

 
menart ©   (2006-11-22 12:41) [0]

Собствено сабж. Заранее всем спасибо


 
RWolf ©   (2006-11-22 12:58) [1]

гугль даст исчерпывающий ответ.


 
orinoko   (2006-11-23 13:49) [2]

Вот могу дать функцию расчёта CRC16 по стандарту Motorola

function CRC16Buf(const Buffer: array of byte; lenpack: integer):word;
var i,b: integer;
     t: byte;
     c,len: word;
begin
c:=0;
len:=lenpack-1;
for i:=0 to len do
  begin
  t:=Buffer[i];
  for b:=1 to 8 do
     begin
     c:=(c shl 1)xor($8005*((t xor Hi(c))and $80)shr 7);
     t:=t shl 1;
     end;
  end;
result:=c;
end;


 
Jeer ©   (2006-11-23 14:02) [3]

Шутка в том, что среди неприводимых многочленов есть несколько длиной 16.
Тебе какой ?


 
Сергей М. ©   (2006-11-23 14:20) [4]


> Jeer ©   (23.11.06 14:02) [3]


Серега, не пугай человека)

У автора, думаю, <= 1 член


 
RWolf ©   (2006-11-23 14:43) [5]


> [3]

а еще на результат влияет порядок обработки бит в байте данных, начальное значение, дополняются ли данные нулевыми битами...


 
Ingwar ©   (2006-11-23 21:54) [6]

Подробное описание алгоритма и примеры программ на С
http://podgoretsky.com/ftp/Docs/Internet/pdf/crcguide.pdf


 
vertal ©   (2006-11-24 01:33) [7]

Можно так например, это  для протокола ModBus, может быть вам подойдет.


unsigned short CalcCRC16(unsigned char *message, int length)
{
unsigned char CRCHi, CRCLo, TempHi, TempLo;
static const unsigned char table[512] = {
0x00, 0x00, 0xC0, 0xC1, 0xC1, 0x81, 0x01, 0x40, 0xC3, 0x01, 0x03, 0xC0, 0x02, 0x80, 0xC2, 0x41,
0xC6, 0x01, 0x06, 0xC0, 0x07, 0x80, 0xC7, 0x41, 0x05, 0x00, 0xC5, 0xC1, 0xC4, 0x81, 0x04, 0x40,
0xCC, 0x01, 0x0C, 0xC0, 0x0D, 0x80, 0xCD, 0x41, 0x0F, 0x00, 0xCF, 0xC1, 0xCE, 0x81, 0x0E, 0x40,
0x0A, 0x00, 0xCA, 0xC1, 0xCB, 0x81, 0x0B, 0x40, 0xC9, 0x01, 0x09, 0xC0, 0x08, 0x80, 0xC8, 0x41,
0xD8, 0x01, 0x18, 0xC0, 0x19, 0x80, 0xD9, 0x41, 0x1B, 0x00, 0xDB, 0xC1, 0xDA, 0x81, 0x1A, 0x40,
0x1E, 0x00, 0xDE, 0xC1, 0xDF, 0x81, 0x1F, 0x40, 0xDD, 0x01, 0x1D, 0xC0, 0x1C, 0x80, 0xDC, 0x41,
0x14, 0x00, 0xD4, 0xC1, 0xD5, 0x81, 0x15, 0x40, 0xD7, 0x01, 0x17, 0xC0, 0x16, 0x80, 0xD6, 0x41,
0xD2, 0x01, 0x12, 0xC0, 0x13, 0x80, 0xD3, 0x41, 0x11, 0x00, 0xD1, 0xC1, 0xD0, 0x81, 0x10, 0x40,
0xF0, 0x01, 0x30, 0xC0, 0x31, 0x80, 0xF1, 0x41, 0x33, 0x00, 0xF3, 0xC1, 0xF2, 0x81, 0x32, 0x40,
0x36, 0x00, 0xF6, 0xC1, 0xF7, 0x81, 0x37, 0x40, 0xF5, 0x01, 0x35, 0xC0, 0x34, 0x80, 0xF4, 0x41,
0x3C, 0x00, 0xFC, 0xC1, 0xFD, 0x81, 0x3D, 0x40, 0xFF, 0x01, 0x3F, 0xC0, 0x3E, 0x80, 0xFE, 0x41,
0xFA, 0x01, 0x3A, 0xC0, 0x3B, 0x80, 0xFB, 0x41, 0x39, 0x00, 0xF9, 0xC1, 0xF8, 0x81, 0x38, 0x40,
0x28, 0x00, 0xE8, 0xC1, 0xE9, 0x81, 0x29, 0x40, 0xEB, 0x01, 0x2B, 0xC0, 0x2A, 0x80, 0xEA, 0x41,
0xEE, 0x01, 0x2E, 0xC0, 0x2F, 0x80, 0xEF, 0x41, 0x2D, 0x00, 0xED, 0xC1, 0xEC, 0x81, 0x2C, 0x40,
0xE4, 0x01, 0x24, 0xC0, 0x25, 0x80, 0xE5, 0x41, 0x27, 0x00, 0xE7, 0xC1, 0xE6, 0x81, 0x26, 0x40,
0x22, 0x00, 0xE2, 0xC1, 0xE3, 0x81, 0x23, 0x40, 0xE1, 0x01, 0x21, 0xC0, 0x20, 0x80, 0xE0, 0x41,
0xA0, 0x01, 0x60, 0xC0, 0x61, 0x80, 0xA1, 0x41, 0x63, 0x00, 0xA3, 0xC1, 0xA2, 0x81, 0x62, 0x40,
0x66, 0x00, 0xA6, 0xC1, 0xA7, 0x81, 0x67, 0x40, 0xA5, 0x01, 0x65, 0xC0, 0x64, 0x80, 0xA4, 0x41,
0x6C, 0x00, 0xAC, 0xC1, 0xAD, 0x81, 0x6D, 0x40, 0xAF, 0x01, 0x6F, 0xC0, 0x6E, 0x80, 0xAE, 0x41,
0xAA, 0x01, 0x6A, 0xC0, 0x6B, 0x80, 0xAB, 0x41, 0x69, 0x00, 0xA9, 0xC1, 0xA8, 0x81, 0x68, 0x40,
0x78, 0x00, 0xB8, 0xC1, 0xB9, 0x81, 0x79, 0x40, 0xBB, 0x01, 0x7B, 0xC0, 0x7A, 0x80, 0xBA, 0x41,
0xBE, 0x01, 0x7E, 0xC0, 0x7F, 0x80, 0xBF, 0x41, 0x7D, 0x00, 0xBD, 0xC1, 0xBC, 0x81, 0x7C, 0x40,
0xB4, 0x01, 0x74, 0xC0, 0x75, 0x80, 0xB5, 0x41, 0x77, 0x00, 0xB7, 0xC1, 0xB6, 0x81, 0x76, 0x40,
0x72, 0x00, 0xB2, 0xC1, 0xB3, 0x81, 0x73, 0x40, 0xB1, 0x01, 0x71, 0xC0, 0x70, 0x80, 0xB0, 0x41,
0x50, 0x00, 0x90, 0xC1, 0x91, 0x81, 0x51, 0x40, 0x93, 0x01, 0x53, 0xC0, 0x52, 0x80, 0x92, 0x41,
0x96, 0x01, 0x56, 0xC0, 0x57, 0x80, 0x97, 0x41, 0x55, 0x00, 0x95, 0xC1, 0x94, 0x81, 0x54, 0x40,
0x9C, 0x01, 0x5C, 0xC0, 0x5D, 0x80, 0x9D, 0x41, 0x5F, 0x00, 0x9F, 0xC1, 0x9E, 0x81, 0x5E, 0x40,
0x5A, 0x00, 0x9A, 0xC1, 0x9B, 0x81, 0x5B, 0x40, 0x99, 0x01, 0x59, 0xC0, 0x58, 0x80, 0x98, 0x41,
0x88, 0x01, 0x48, 0xC0, 0x49, 0x80, 0x89, 0x41, 0x4B, 0x00, 0x8B, 0xC1, 0x8A, 0x81, 0x4A, 0x40,
0x4E, 0x00, 0x8E, 0xC1, 0x8F, 0x81, 0x4F, 0x40, 0x8D, 0x01, 0x4D, 0xC0, 0x4C, 0x80, 0x8C, 0x41,
0x44, 0x00, 0x84, 0xC1, 0x85, 0x81, 0x45, 0x40, 0x87, 0x01, 0x47, 0xC0, 0x46, 0x80, 0x86, 0x41,
0x82, 0x01, 0x42, 0xC0, 0x43, 0x80, 0x83, 0x41, 0x41, 0x00, 0x81, 0xC1, 0x80, 0x81, 0x40, 0x40,
};
CRCHi = 0xff;
CRCLo = 0xff;
while(length)
{
TempHi = CRCHi;
TempLo = CRCLo;
CRCHi = table[2 * (*message ^ TempLo)];
CRCLo = TempHi ^ table[(2 * (*message ^ TempLo)) + 1];
message++;
length--;
};
return (CRCHi << 8) | CRCLo;
}


 
Германн ©   (2006-11-24 01:53) [8]


> Ingwar ©   (23.11.06 21:54) [6]
>
> Подробное описание алгоритма и примеры программ на С
> http://podgoretsky.com/ftp/Docs/Internet/pdf/crcguide.pdf

Странно. Я был уверен, что "пролистал" и не раз весь сайт АП. Как же я пропустил такую ссылку? :-(


 
menart ©   (2006-11-24 08:40) [9]


> orinoko   (23.11.06 13:49) [2]
> Вот могу дать функцию расчёта CRC16 по стандарту Motorola

Я и использую эту модель, но программка в контролере регулярно выкидывает ошибку не совпадение контрольной суммы :(


 
menart ©   (2006-11-24 08:41) [10]

Извеняюсь, использую модель для modbus



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.048 c
2-1164016196
LG
2006-11-20 12:49
2006.12.10
Клавиатурный перехватчик


2-1164354858
Kostafey
2006-11-24 10:54
2006.12.10
Принудительная сортировка в сетке.


2-1164481225
Ezorcist
2006-11-25 22:00
2006.12.10
readln в консольном приложении


1-1161812639
VeLeS
2006-10-26 01:43
2006.12.10
Как одновременно редактировать дату и время в TDatetime?


1-1161710150
7D7
2006-10-24 21:15
2006.12.10
Как узнать объем памяти для данных?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский