LabVIEWForum.de
Intel -> Motorola Byteordnung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Intel -> Motorola Byteordnung (/Thread-Intel-Motorola-Byteordnung)

Seiten: 1 2


Intel -> Motorola Byteordnung - Lucky - 21.06.2018 11:49

Hallo zusammen,

ich habe mit LV eine Programm erstellt das aus CAN-Bus Informationen aus einer binären Datei zum Vector DBC Format konvertiert -> läuft auch soweit !

Mein Problem: um ein Signal zu beschreiben wird Startbit, Länge und Byteordnung benötigt, die Quelldaten enthalten diese Information im INTEL Format, ich benötige sie aber im MOTOROLA Format.

Ich kann diese zwar nachträglich im CANdb++ Editor ändern, allerdings ist diese bei 700 Signalsen sehr mühsam ;-)


Beispiel:

Startbit: 18, Länge: 14 INTEL durch den CANdb++ Editor angepasst ergibt es Startbit: 24, Länge: 14 MOTOROLA

und genau diese Umwandlung möchte ich in mein Programm einbauen ! nur wie komme ich darauf ?


RE: Intel -> Motorola Byteordnung - GerdW - 21.06.2018 11:52

Hallo Lucky,

du bekommst 8 Byte Payload mit deiner CAN-Botschaft.
Diese 8 Byte drehst du jetzt einfach um: Reverse1DArray…
(Liest du hier.)

Zitat:Startbit: 18 INTEL durch den CANdb++ Editor angepasst ergibt es Startbit: 24 MOTOROLA
Das passt (IMHO) nicht! (Startbit 18 ist mitten im dritten Byte, Bit 24 aber an einer Bytegrenze…)


RE: Intel -> Motorola Byteordnung - Lucky - 21.06.2018 12:02

Hallo !

meine Quelldaten enthalten keine Payload, sondern nur die Informationen wo das Signal in der Botschaft liegt, also ID, Signalname, Startbit, länge,Faktor,Offset und Unit

das Startbit (z.b. 18) ist auf INTEL Format bezogen, ich muß es aber ins Motorola Format konvertieren

Lasse ich das durch den Editor machen, macht er 24 daraus, was dann auch passt !...ich möchte aber verstehen wie er das tut damit ich es in meine LV Programm einbauen kann

EDIT:
ich habe zwei Screenshots angehängt um es zu veranschaulichen


RE: Intel -> Motorola Byteordnung - GerdW - 21.06.2018 12:20

Hallo Lucky,

öffne einfach dein DBC mit dem CANdb++ und schau dir das Layout einer Botschaft im Botschaftseditor an.
Ein Signal, welches mehrere Bytes belegt, beginnt und endet mit einem roten Pfeil. Mittendrin sind noch weiße Pfeile an den Bytegrenzen.
Als Beispiel die klassische EEC1-Botschaft eines Trucks:
[attachment=59231](Achte auf EngineSpeed und Fuel_Injection…)
Jetzt einfach mal eine Botschaft mit gemischt INTEL-/MOTOROLA-Signalen erstellen und anschauen.

INTEL arbeitet little endian, MOTOROLA big endian…

Mein Edit nach deinem Edit:
Du hast ein Signal, welches die Bits 18 bis 31 (INTEL) belegt.
Bei Intel ist das niederwertigste Bit in Bit18 gespeichert, das 6. Bit des Signals in Bit23 und die 8 oberen Bits von Bit24 bis Bit31.
Bei Motorola ist das niederwertigste Bit in unteren Bit des oberen Bytes, d.h. Bit 24 gespeichert. Das 8. Bit steht im höchste Bit des oberen Byte = Bit31. Im "unteren"/ersten Byte findest du dann die 6 höherwertigen Bits des Signals, von Bit16 bis Bit21.

Einfacher zu verstehen ist das Schema, wenn du dir die Bytes einfach mal auf einem Blatt Papier nebeneinander aufmalst!


RE: Intel -> Motorola Byteordnung - Lucky - 21.06.2018 12:33

ok, das ist soweit verstanden !

jetzt brauche ich nur eine Funktion oder Formal die eine Konvertierung durchführt also um von 18 Intel nach 24 Motorola zu kommen

also genau das was der CANdb++ tut wenn wenn ich die Byteanordnung ändere


RE: Intel -> Motorola Byteordnung - GerdW - 21.06.2018 12:40

Hallo Lucky,

mal dir doch einfach die 8 Bytes nebeneinander auf, mit Markierung für die Bits.
Dann läuft es auf "Abzählen" hinaus - also simple Addition/Subtraktion… Big Grin
(Intel-Signale starten immer von links, Motorola von rechts…)


RE: Intel -> Motorola Byteordnung - Lucky - 21.06.2018 13:34

hm, egal wie ich zähle, ich komme nicht von der 18 auf die 24 Confused
vielleicht liegt es auch gerade an meiner Grippe Undecided


RE: Intel -> Motorola Byteordnung - GerdW - 21.06.2018 13:57

Hallo Lucky,

ich hab's dir mal aufgemalt:
[attachment=59233]


RE: Intel -> Motorola Byteordnung - Lucky - 21.06.2018 15:34

Danke ! :-) so in der art hatte ich es mir auch aufgemalt !

aber wie drücke ich das in einer Funktion/Formel aus ? ich habe als Input immer nur das Intel Startbit und die länge , von dort muß ich zum Motorola Startbit rechnen


RE: Intel -> Motorola Byteordnung - GerdW - 21.06.2018 15:45

Hallo Lucky,

aus der INTEL-Beschreibung den benutzten Bit-Bereich berechnen:
Start = 18, Länge = 14 ergibt Bereich Bits 18-31

Dann schauen, wo das höchste/letzte Bit landet und wieviele Bits in diesem Byte benutzt sind:
Bit 31 = Byte 3, Bit 7
alle 8 Bits benutzt, auch Bit24

Dann ab ab Bit24 14 Bits nach MOTOROLA-Manier abfragen.

Ich muss sagen, dass ist schon umständlich. Insbesondere, weil dein Signal eine krumme Bitanzahl (14 statt 16 oder 8) benutzt und damit mitten im Byte anfängt/endet. Ich habe bisher immer "schöne" DBC-Dateien verwendet, mit "hübschen" Signalen von 8/16/32 Bit Größe. Und wenn krumme Größen, dann in INTEL-Order…
Was für ein Gerät verwendest du denn?