Вверх ↑
Этот топик читают: Гость
Ответов: 62
Рейтинг: 1
#1: 2009-04-22 08:51:08 ЛС | профиль | цитата
Помогите разобраться с подсчетом CRC. Имеется вот такой код на паскале :



//Быстрый расчет CRC c полиномом MODBUS :

const srCRCHi:array[0..255] of byte = (
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40,
$00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41,
$00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,
$01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,
$01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,
$01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,
$01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40);

srCRCLo:array[0..255] of byte = (
$00, $C0, $C1, $01, $C3, $03, $02, $C2, $C6, $06, $07, $C7, $05, $C5, $C4, $04, $CC, $0C, $0D, $CD,
$0F, $CF, $CE, $0E, $0A, $CA, $CB, $0B, $C9, $09, $08, $C8, $D8, $18, $19, $D9, $1B, $DB, $DA, 1A,
$1E, $DE, $DF, $1F, $DD, $1D, $1C, $DC, $14, $D4, $D5, $15, $D7, $17, $16, $D6, $D2, $12, $13, $D3,
$11, $D1, $D0, $10, $F0, $30, $31, $F1, $33, $F3, $F2, $32, $36, $F6, $F7, $37, $F5, $35, $34, $F4,
$3C, $FC, $FD, $3D, $FF, $3F, $3E, $FE, $FA, $3A, $3B, $FB, $39, $F9, $F8, $38, $28, $E8, $E9, $29,
$EB, $2B, $2A, $EA, $EE, $2E, $2F, $EF, $2D, $ED, $EC, $2C, $E4, $24, $25, $E5, $27, $E7, $E6, $26,
$22, $E2, $E3, $23, $E1, $21, $20, $E0, $A0, $60, $61, $A1, $63, $A3, $A2, $62, $66, $A6, $A7, $67,
$A5, $65, $64, $A4, $6C, $AC, $AD, $6D, $AF, $6F, $6E, $AE, $AA, $6A, $6B, $AB, $69, $A9, $A8, $68,
$78, $B8, $B9, $79, $BB, $7B, $7A, $BA, $BE, $7E, $7F, $BF, $7D, $BD, $BC, $7C, $B4, $74, $75, $B5,
$77, $B7, $B6, $76, $72, $B2, $B3, $73, $B1, $71, $70, $B0, $50, $90, $91, $51, $93, $53, $52, $92,
$96, $56, $57, $97, $55, $95, $94, $54, $9C, $5C, $5D, $9D, $5F, $9F, $9E, $5E, $5A, $9A, $9B, $5B,
$99, $59, $58, $98, $88, $48, $49, $89, $4B, $8B, $8A, $4A, $4E, $8E, $8F, $4F, $8D, $4D, $4C, $8C,
$44, $84, $85, $45, $87, $47, $46, $86, $82, $42, $43, $83, $41, $81, $80, $40);

const InitCRC:word = $FFFF;

function UpdCRC(C : byte; oldCRC : word) : word;
var i: byte;
arrCRC: array [0..1] of byte absolute oldCRC;

begin
i:= arrCRC[1] xor C;
arrCRC[1]:= arrCRC[0] xor srCRCHi[i];
arrCRC[0]:= srCRCLo[i];
UpdCRC:=oldCRC;
end;



// Пусть BufSend содержит подготовленный для посылки пакет длиной LengthSend байт

Crc := UpdCRC(BufSend[0],InitCRC);
For I := 1 to LengthSend-1 do Crc := UpdCRC(BufSend[I], Crc);
BufSend[LengthSend] := Crc div 256;
BufSend[LengthSend + 1] := Crc mod 256;

Есть достоверные CRC:

63 02 01 3C -> BE 21
63 04 02 00 -> 5E C1
63 32 30 13 19 04 07 47 30 13 19 04 07 -> 39 04
63 41 53 08 23 04 07 25 56 08 23 04 07 -> F1 48
63 14 56 08 06 05 07 15 56 08 06 05 07 -> 5E BE

Топик [url]http://hiasm.com/forum.html?q=3&p=76006 [/url]мне не помог, при расчете я не получал нужного результата.

заранее благодарен.
P.S. почему-то мне не удалось вставить BB коды, пришлось так вставлять листинг.
P.P.S.-----> это в Мазиле, в IE все нормально








карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 62
Рейтинг: 1
#2: 2009-04-29 10:22:00 ЛС | профиль | цитата
Блуждая по просторам нета наткнулся вот сюда http://www.lammertbies.nl/comm/info/crc-calculation.html. Есть там и исходники http://www.lammertbies.nl/download/lib_crc.zip, но как всегда не на том языке который понимаешь
Уважаемые знатоки, сделайте плиз компонент для hiasm, очень нужно!!! Я уже все мозги перевернул с этой CRC. заранее благодарен.


карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2009-04-29 17:07:38 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2025-01-17 15:06:07
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#4: 2009-04-29 17:11:37 ЛС | профиль | цитата
loft1436.serverloft.com Это для чего? VBS что ли?
карма: 10
0
Разработчик
Ответов: 26322
Рейтинг: 2147
#5: 2009-04-29 17:30:56 ЛС | профиль | цитата
Assasin писал(а):
Это для чего? VBS что ли?

Ассемблер
карма: 22

0
Ответов: 62
Рейтинг: 1
#6: 2009-04-30 08:23:53 ЛС | профиль | цитата
Решил попробовать сделать компонент сам, не знаю что получится, но делать то что-то надо ))) да и самому интересно что получится. задумки - вход на подсчет CRC в виде ASCII или HEX, CRC 16 / CRC 32, прямой или обратный порядок байтов на выходе
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 62
Рейтинг: 1
#7: 2009-05-13 14:17:53 ЛС | профиль | цитата
вот полуфабрикат (для ASCII). код довольно избыточен, пока не оптимизировал code_13244.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
1
файлы: 1code_13244.txt [11.7KB] [1745]
Голосовали:Ravilr
Ответов: 4641
Рейтинг: 334
#8: 2009-05-13 14:55:28 ЛС | профиль | цитата
jeka_kam писал(а):
вот полуфабрикат (для ASCII). код довольно избыточен, пока не оптимизировал code_13244.txt

оформи в виде компонента с выбором CRC и кидай в раздел компоненты
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 62
Рейтинг: 1
#9: 2009-05-13 15:05:12 ЛС | профиль | цитата
Ravilr писал(а):
оформи в виде компонента с выбором CRC и кидай в раздел компоненты
пытаюсь только как-то не очень выходит...
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 4641
Рейтинг: 334
#10: 2009-05-13 15:12:41 ЛС | профиль | цитата
см например компонент Charset
Очень вроде показательный.
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 62
Рейтинг: 1
#11: 2009-05-13 16:24:02 ЛС | профиль | цитата
Ravilr писал(а):
см например компонент Charset
Очень вроде показательный.
как сказать ...
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 62
Рейтинг: 1
#12: 2009-05-22 08:36:21 ЛС | профиль | цитата
Ravilr писал(а):
оформи в виде компонента с выбором CRC и кидай в раздел компоненты

оформил в виде компонента, есть пример. [url] http://hiasm.com/forum_serv.php?q=56&id=243 [/url]
а для указанного раздела я раб... ну в смысле бесправный...участник..
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26322
Рейтинг: 2147
#13: 2009-05-22 08:49:33 ЛС | профиль | цитата
jeka_kam писал(а):
а для указанного раздела я раб... ну в смысле бесправный...участник..

Но, это... Ты бы как-то поосторожней выражался, что ли. Любой участник бесправный, и не только ты, это -- защита от наплывов, разного рода, кулхацкеров
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#14: 2009-05-22 08:59:22 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2025-01-17 15:06:07
карма: 0

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)