Számolási módszer crc xor

XOR CRC számítási módszer

Van egy darab vas, amellyel igyekszem kommunikálni. Küldök neki itt Taku szerkezete:
# XA0; TTRKMsg = rekord
# XA0; Sbyte. byte;
# XA0; device_no. array [0..1] char;
# XA0; Command. char;
# XA0; SBuffer. byte;
# XA0; a. array [0..5] Char;
# XA0; b. array [0..5] char;
# XA0; Error. array [0..1] char;
# XA0; kér. array [0..1] char;
# XA0; EBuffer. byte;
# XA0 CRC. byte;

típus
# XA0; tBytes = array [0..23] bájt;
# XA0; pBytes = ^ tBytes;

működnek CalcCRC (xBuff: TTRKMsg): byte;
var P: pBytes;
# XA0; # XA0; i: byte;
kezdődik
# XA0; P: = @ xBuff;
# XA0; Eredmény: = 0;
# XA0; i: = 1 sizeof (xBuff) -1 do kezdődik
# XA0; # XA0; Eredmény: = Eredmény xor P ^ [i];
# XA0; end;
végén;

Jön a válasz: a készülék jelzi nekem, hogy ez nem igaz összeg CRC. Nézd, mit tehetek van, plz.

Továbbá:
indítóbitet nem vesszük figyelembe a checksum, azaz
Sbyte. byte; Nem szabad figyelembe venni kiszámításakor

>> tettem i: = 0, mert az első bit - indul el, és ő, mint írtam fent, nem vesz részt a postchete.

TTRKMsg = csomagolt rekord
.

var P: PByteArray;
# XA0; i: byte;
kezdődik
P: = @ xBuff;
Eredmény: = 0;
i: = 1-től sizeof (TTRKMsg) - 2 nem kezd // 2 -Ahogy a CRC mezőt, úgy vélem, nem veszi figyelembe
# XA0; Eredmény: = Eredmény xor P ^ [i];
végén;

Logikusan, a CRC száma nem ésszerű, de a lényeg, itt egy részlet:
„Counting byte checksum üzenete (CRC mező) által termelt művelet XOR (vagy isklyuchaeschee) minden byte az üzenet, beleértve EBuffer, kivéve SByte.”

És ha egy hurkot fel sizeof (TTrkMsg) -2, a darab vasat nem hajlandó válaszolni rá üzenet polsannoe

és ha a végén kezdjük el? downto

>> Slym is egy lehetőség, de.

Itt vagyok, mielőtt fontolóra a CRC, a szerkezet „reset” is, azaz,

Msg.CRC: = 0;
Msg.CRC: = CalcCRC (MSG);

Iron megállt öt válaszoljon. ami vagyok nagyon zavaros

érdekes. Most tekinthető CRC-t, majd írt le a szerkezet. Kiderült, hogy, hogy megváltoztatta a CRC. Egy ördögi kör, de. Talán még mindig nem kell figyelembe venni

Valami van a szerkezet TTRKMsg számít összesen 23 bájt,

> TBytes = array [0..23] bájt;

24 bájt!

offtopic: ami érdekes - ez a szemét általában semmi köze a crc. % -)

a legtöbb esetben (az én tapasztalatom szerint), CRC kellett elindítani a $ FF.

funkció CalcCRC (const xBuff: TTRKMsg): byte;
var __xBuff: array [byte] bájt abszolút xBuff;
# XA0; # XA0; i: byte;
kezdődik
# XA0; # XA0; Eredmény: = $ FF;
# XA0; # XA0; i: = sizeof (xBuff.Sbyte) a (sizeof (xBuff) -1) -sizeof (xBuff.CRC) do kezdődik
# XA0; # XA0; # XA0; # XA0; Eredmény: = Eredmény xor __xBuff [i];
# XA0; # XA0; end;
végén;

A felvétel nem csomagolt, így egy csomó lehetőséget annak befejezését, a kiviteltől függően a Delphi és a beállításokat.
ShowMessage (IntToStr (sizeof (TTRKMsg)))

Memória: 0,74 MB
Idő: 0,095 c

Kapcsolódó cikkek