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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.