Главная страница
    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.043 c
6-1153474419
bobbi
2006-07-21 13:33
2006.12.10
И снова отправка почты ...........


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


8-1146395580
Gumus
2006-04-30 15:13
2006.12.10
Popupmenu


2-1164527238
Chuk &amp; Gek
2006-11-26 10:47
2006.12.10
мыло


2-1164278756
Xmen
2006-11-23 13:45
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский