13.03.2012, 10:21
Beitrag #1
|
eb
LVF-Lernwilliger
Beiträge: 292
Registriert seit: Mar 2008
2014
2008
EN
12xxx
Deutschland
|
TypeCast U16-Array auf FXP-Array - zu wenige Elemente
Hallo zusammen,
gestern ist mir wieder mal sauer aufgestoßen, dass ich keine Arrays aus U16 in Arrays aus FXP "typecasten" kann. Soweit ich das herausfindenkonnte funktionieren die anderen DatenTypen wunderbar: es werden immer sauber alle Bits "uminterpretiert". Bspw. stecken im Ausgangs-Array 2Elemente U16 und ich typecaste das nach U8, dann sind es 4xU8 Elemente. Aber mit dem FXP Datentype habe ich Probleme!
Hier mein konkretes Problembeispiel:
Gruß
|
|
|
13.03.2012, 11:24
Beitrag #2
|
eb
LVF-Lernwilliger
Beiträge: 292
Registriert seit: Mar 2008
2014
2008
EN
12xxx
Deutschland
|
RE: TypeCast U16-Array auf FXP-Array - zu wenige Elemente
Hallo nochmal,
ich habe ein weiteres Test-VI gebaut, was mein "Problem" noch einfacher veranschaulicht. Es enthält 3 Tests, wobei die ersten beiden funktionieren der dritte aber fehlschlägt. Aber bitte seht selbst:
Wo steckt mein Denkfehler, oder ist es tatsächlich ein Bug?
Gruß
|
|
|
13.03.2012, 11:49
Beitrag #3
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: TypeCast U16-Array auf FXP-Array - zu wenige Elemente
Hallo Erik,
frag doch mal bei NI nach, warum ein FXP-Array intern nach U64 gecastet wird, ein skalares FXP degegen nach U8. Würde mich auch interessieren...
|
|
|
13.03.2012, 12:01
Beitrag #4
|
RoKi0815
LVF-Grünschnabel
Beiträge: 14
Registriert seit: Dec 2011
2010
2011
DE_EN
Deutschland
|
RE: TypeCast U16-Array auf FXP-Array - zu wenige Elemente
Der Typecast-Block an sich nimmt meiner Meinung nach keine Arrays an, sozusagen, versuchst du ein Element vom Typ ArrayFXP in ein Element vom Typ ArrayU8 umzuwandeln. Arrays werden in LabVIEW scheinbar anders gespeichert als reine Variablen. Also ist ein Array U8 genauso groß wie ein Array U64? Das müsste man genauer untersuchen.
Jedenfalls, geht das so nicht wirklich. Das jeder 8. Wert stimmt liegt dann (wenn meine erste Ausssage stimmt) daran, dass der Typecast bei Elementen mit weniger Bits als der geforderte Typ, die Bits in den Upper-Bit bereich schiebt. (siehe dazu die LV-Hilfe) Größter unsigned Datentyp ist U64, also 8x8 Bits, also 8x U8.
Hab das natürlich jetzt nicht kontrolliert, bin aber der Meinung, dass das der Grund sein sollte. Sollte dem nicht so sein, bitte korrigiert mich. Bin ja schließlich lernwillg.
PS: Für FXP Typecasts nutze ich in der Regel gleich die vorgefertigten Blöcke für den FXP-Typ.
|
|
|
13.03.2012, 14:46
Beitrag #7
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
RE: TypeCast U16-Array auf FXP-Array - zu wenige Elemente
(13.03.2012 13:26 )erik.brenncke schrieb: Hallo und danke für das rege Interesse,
Ich habe nun beim Support von NI nachgefragt:
Es ist bestätigt, dass für RT und Host-Systeme (nicht FPGA) der FXP-Datentyp intern immer mit 64bit gerechnet wird. Das ist die maximale Breite des Datentyps. Es gibt (noch) keine Ermittlung des Mindestbreite, selbst wenn man explitzit bspw. den FXP-Datentyp auf 8bit-Breite eingestellt hat.
kurzum: Its a feature, not a bug.
Da ich den FXP-Datentyp zunächst nur auf der FPGA-Ebene verwendete (und es da wie vorhergesehen funktioniert), glaubte ich zunächst einen Bug entdeckt zu haben, als ich es auf Host-Seite ausprobierte. Es ist für mich schlicht nicht "intuitiv" wenn ein explizit auf 8bit gestellter Datentyp intern weiterhin 64bit hat. Wenn ich explizit U8 wähle, dann ist der intern ja auch nicht U64, oder?
Alles jammern hilft nichts. Jetzt habe ich die Funktionsweise verstanden und werde meinen Code entsprechend anpassen.
Danke und Gruß
Erik
Du vregisst den Unterschied. Ein U8 oder U64 ist ein explizit gewählter Datentyp der ja auch ein eigenes Icon, und im Falle der polymorphen Funktionen auch eigene Methoden hat, aber der FXP ist ein nachträglich konfigurierbarer Datentyp. Das eine wird vom Syntaxchecker einmal bei der Auswahl des Datentyps festgelegt, das andere ist mehr eine Laufzeiteinstellung, ausser wenn es im FPGA Compile in den Bytecode umgesetzt wird.
Wäre auch nicht praktisch um aus 64 verschiedenen FXP Icons wählen zu müssen.
|
|
|
13.03.2012, 17:07
(Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2012 17:12 von eb.)
Beitrag #8
|
|
|
| |