31.10.2009, 00:21
Beitrag #1
|
ayk
LVF-Neueinsteiger
Beiträge: 1
Registriert seit: Sep 2007
8.5
2007
kA
88161
Deutschland
|
Von 4x uint8 zu uint32 zu int32 zu fxp
Hi,
stehe seit paar Tagen vor einem "kleinen" Problem. Ich bekomme über CAN eine Nachricht, die aus 8 Bytes besteht. Nun möchte ich 4 Bytes zusammenfassen, damit ich einen 32Bit wert bekomme, was ich auch hinbekomme mit hi+lo. Allerdings hätte ich nun gerne, dass der Wert nun als FXP 32en21 behandelt wird. Wenn ich den aktuellen int32 in fxp convertiere, übernimmt er den int32 wert als vorkommawert, statt einfach an 11. stelle den Punkt zu setzen. Ich hoffe ich konnte mich klar Ausdrücken ) Hätte da jemand eine Idee?
Danke schon mal im Voraus!
|
|
|
31.10.2009, 08:16
(Dieser Beitrag wurde zuletzt bearbeitet: 31.10.2009 08:22 von Lucki.)
Beitrag #2
|
|
|
31.10.2009, 13:30
Beitrag #3
|
IchSelbst
LVF-Guru
Beiträge: 3.689
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Von 4x uint8 zu uint32 zu int32 zu fxp
Kann mal einer aus einem richtigen LV, also einer englischen Version, keiner deutschen Version, die Beschreibung von "Wortlänge" und "Integer-Länge" hier posten. Ich werd aus der deutschen Beschreibung einfach nicht schlau.
Irgendwie funktioniert das alles nur suboptimal. Eigentlich möchte man doch haben, dass ein (vorzeichenloser) 32Bit-Wert z.B. automatisch einen 11Bit-breiten Vorkommawert (also maximal 2047) hat. Die restlichen 21 Bit sollen als Nachkommawert gelten. Eine 1 wäre also nicht das gesetzte B0 des 32Bit-Wertes, sondern das gesetzte B21 (= B31 - (11-1)).
Lucki's Methode gemäß linkes Bild wäre ein harter Typcast (den ich eigenlich immer vermeiden möchte), sollte aber funktionieren, wenn die Konfiguration des FXP-Formates nachvollziehbar wäre.
Ein normaler U32->FXP-Konverter würde den ganzen U32 natürlich als Vorkommastelle nehmen.
Eine andere Möglichkeit wäre noch, man teilte die U32-Zahl durch 2^21, wandle nach dbl und gebe das auf einen FXP. Und eigentlich sollte doch der FXP eine DBL-Zahl verstehen können. Die hat schließlich auch Vor- und Nachkommastellen.
Und außerdem: Muss es unbedingt FXP sein, tut es DBL nicht auch?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
31.10.2009, 13:39
Beitrag #4
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Von 4x uint8 zu uint32 zu int32 zu fxp
' schrieb:Kann mal einer aus einem richtigen LV, also einer englischen Version, keiner deutschen Version, die Beschreibung von "Wortlänge" und "Integer-Länge" hier posten. Ich werd aus der deutschen Beschreibung einfach nicht schlau.
Mach ich doch gerne: Word length und Integer word length.
Hierzu die Screenshots:
Word length ist also die Gesamtgröße, Integer word length die Anzahl an Bits, die für den "Vorkommawert" zuständig sind. Erkennt man prima, indem man mal beim zweiten Feld den max./min. Wert eingibt.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
31.10.2009, 14:45
(Dieser Beitrag wurde zuletzt bearbeitet: 31.10.2009 14:46 von Lucki.)
Beitrag #5
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Von 4x uint8 zu uint32 zu int32 zu fxp
' schrieb:Word length ist also die Gesamtgröße, Integer word length die Anzahl an Bits, die für den "Vorkommawert" zuständig sind. Erkennt man prima, indem man mal beim zweiten Feld den max./min. Wert eingibt.
Alles richtig, nur darf man deshalb nicht glauben, daß z.B. eine FIX-Zahl mit Wortlänge 2 und 1 Nachkommastelle (Wertevorrat also 0; 0.5; 1; 1.5) im Speicher nur 8 bit oder weniger Platz reserviert. Das Abspeichern aller FIX-Formate scheint immer linksbündig innerhalb von 64bit zu erfolgen, also auch in diesem Beispiel.
Die interessante Frage, was passiert mit so einem Format bei Shift oder Rotation, stößt ins Leere: Es geht nicht.
|
|
|
| |