LabVIEWForum.de - Intel -> Motorola Byteordnung

LabVIEWForum.de

Normale Version: Intel -> Motorola Byteordnung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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 ?
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…)
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
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!
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
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…)
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
Hallo Lucky,

ich hab's dir mal aufgemalt:
[attachment=59233]
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
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?
Seiten: 1 2
Referenz-URLs