C embedded: Float zu uint32_t aus multidimensionalem Pointer funktioniert nicht

Gast #4474097
Lesenswert?

Hallo Leute!

eine ganz kurze frage... Wahrscheinlich liegt es nur an mangelnder 
Erfahrung:

Hier die Deklaration:
1
FLOAT32*fourB[2][6];

lastUsedBuffer pendelt brav zwischen 1 und 0, das hab ich sichergestellt 
(im debugger überwacht)

Dies Funktioniert:
1
FLOAT32 VALUES[0] = *(fourB[lastUsedBuffer][0]);

Das dagegen nicht:
1
uint32_t ByteSwapTemp = ((uint32_t)(*(fourB[lastUsedBuffer][0])));

Warum?
Gast #4474163
Lesenswert?

Be S. schrieb:
> Alex schrieb:
>> Hier die Deklaration:
>> FLOAT32*fourB[2][6];
>
> Warum Zeiger? Worauf zeigen diese?

Die Zeiger zeigen auf einen ausschnitt eines Byte Arrays. In diesem 
liegen die Ganzen Floatwerte als Rohdaten vor (da sie dort von einem Bus 
abgelegt werden). An der Addresse befindet sich ohne zweifel der 
richtige Wert, nur kann ich ihn nicht in die 32 Bit variable reincasten.
#4474177
Lesenswert?

Alex schrieb:
> An der Addresse befindet sich ohne zweifel der
> richtige Wert, nur kann ich ihn nicht in die 32 Bit variable reincasten.

Was willst du? Ein Cast schneidet die Nachkommastellen ab (1.23 => 1). 
Wenn du den binären Wert erhalten willst (um sie dann über die 
Schnittstelle zu senden), hat Peter bereits eine Lösung geliefert.
#4474341
Lesenswert?

Pointer casten ist immer ein dirty hack.
Auf der gleichen Maschine, zwischen Programmen mit dem gleichen Compiler 
übersetzt, kann es gut gehen.

Wir benutzen daher für Zahlenübergaben in variablen Datenfeldern immer 
Strings.
Ist zwar aufwendiger, funktioniert aber immer und hat keine Fallgruben.
Man muß natürlich Rundungsfehler tolerieren, aber ein ordentlicher 
Programmierer vergleicht ja eh nie floats auf Gleichheit (außer mit NAN 
oder INFINITY).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren