TłoPakiet Perla() na wiadomość?
Mam urządzenie podłączone do mojego komputera na port szeregowy, który jest zorientowany, gdzie każda przychodząca wiadomość polecenia jest dokładnie osiem 16-bitowe słowa wiadomość. Najbardziej znaczący bajt każdego słowa jest odbierany jako pierwszy, a najmniej znaczący bajt - jako drugi. Każde słowo nagłówka jest identyfikatorem polecenia (w zakresie od 0 do 255). Format jest zdefiniowane tak:
XXXX Header Word (Placeholder for 16-bit Hexadecimal value)
XXXX Data Word
XXXX Data Word
XXXX Data Word
XXXX Data Word
XXXX Data Word
XXXX Data Word
XXXX Checksum Word (Result of Exclusive OR on header word and all six data words)
Format komendy trzeba wysłać, header 0x5D, jest zdefiniowane tak:
Word 1: Header = 005Dh
Word 2: Mode (values can be 2, 3, 6, 8, 9)
Words 3-7: Not significant
Word 8: 16 bit checksum
pytania (wszystkie związane)
Mam ten przykład z innego kodu źródłowego, który najwyraźniej wysyła tę wiadomość poprawnie, ale nie jestem pewien, co się dzieje, nawet po przeczytaniu perldoc na opakowaniu.
pack("v"x8, 0x00, 0x5D, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x5D);
- "v" oznacza mały endian, ale nie mogę znaleźć żadnego odniesienia na x8 poniższy go.
- I zgodnie z formatem wiadomości, czy wartość 0x5D nie powinna być zaraz po "v" x8, a nie po 0x00?
- Wiadomość powinna zawierać osiem 16-bitowych słów, dlaczego więc jest 16, a nie 8? Niektóre z nich to 0x00, a nie 0x0? Czy to robi różnicę?
nie ' "v" x8' oznacza' vvvvvvvv'? – Fabricator
Ah, racja. Ciąg powtarzający magię mnożnika. Nie związane z pakietem, ale z łańcuchami w ogóle. Więc to było po prostu zwięźle napisane zamiast pakietu ("vvvvvvvv", ....). Wciąż jednak przegrywałem w pytaniach 2 i 3. – rem45acp
Jakiej "wartości 0x68" używasz w pytaniu 2? W podanej specyfikacji lub kodzie nie ma wartości 0x68. – jwodder