Доброй ночи
Подскажите люди добрые, почему у меня не выходит каменный цветок
Есть функция на делфи:
const _CR_CCNET_CRC_POLY = $08408
function GetCRC16(InData: array of byte; DataLng: word): word;
var i,TmpCRC: word;
j: byte;
begin
result:=0;
for i:=0 to (DataLng-1) do
begin
TmpCRC:=result xor InData[i];
for j:=0 to 7 do
begin
if (TmpCRC and $0001)<>0 then
begin
TmpCRC:=TmpCRC shr 1;
TmpCRC:=TmpCRC xor _CR_CCNET_CRC_POLY;
end
else
TmpCRC:=TmpCRC shr 1;
end;
result:=TmpCRC;
end;
end;
Переводим её в ST:
FUNCTION CRC : WORD
VAR_INPUT
InData:ARRAY [0..10] OF BYTE;
DataLng:WORD;
END_VAR
VAR
i, TmpCRC:WORD;
j:BYTE;
END_VAR
CRC:=16#0;
FOR i:=0 TO (DataLng-1) DO
TmpCRC:=CRC XOR InData[i];
FOR j:=0 TO 7 DO
IF (TmpCRC AND 16#0001) <> 0 THEN
TmpCRC:=SHR(TmpCRC ,1);
TmpCRC:=TmpCRC XOR 16#08408;
ELSE
TmpCRC:=SHR(TmpCRC ,1);
END_IF
CRC:=TmpCRC;
END_FOR
END_FOR
В итоге CRC рассчитывается неправильно. Почему - понять не могу
Причем один запрос обрабатывает верно.
Пример:
Данные
02 03 06 33
CRC
DA 81
Еще один 02 03 06 30, CRC 41 B3.
Хм, наткнулся на калькулятор, считает правильно - пишет что CRC называется CRC-CCITT (Kermit).
Пойду дальше гуглить.