floatzahl in ein assemblerkompatibles Format umwandeln

Gast #2102476
Lesenswert?

Hallo zusammen,

eine Sensorelektronik liefert eine Floatzahl welche Werte von -200,0 bis 
+850,0 beschreibt.
Diese Floatzahl ist zwar mit 'C' auszuwerten aber ich suche eine 
Möglichkeit diese in ein assemblerkompatibles Zahlenformat umzuwandeln.

Gibt es da eine Lösung?
Moderator (Firma: Titel) Persönliche Seite #2102491
Lesenswert?

König Artus schrieb:
> eine Sensorelektronik liefert eine Floatzahl welche Werte von -200,0 bis
> +850,0 beschreibt.
Worüber (Schnittstelle, ADC) wird diese Zahl geliefert?

> Möglichkeit diese in ein assemblerkompatibles Zahlenformat umzuwandeln.
Wozu? In welchem Assembler?

> eine Floatzahl welche Werte von -200,0 bis +850,0 beschreibt.
Diese Zahl liesse sich z.B. in einer Festpunktzahl super abbilden.
Du definierst einfach: Zahlenbereich -2000...8500 und schwuppdiwupp 
passt das locker in eine 16-Bit Zahl...
Gast #2102782
Lesenswert?

Danke für eure Antworten!

Lothar Millers Idee mit der 16-Bitzahl ist schon mal einleuchtend.


Der Hintergrund:(Hätte ich sofort schreiben sollen)

Die Sensorelektronik gibt über SPI(Slave) eine floatzahl aus(4 Byte).
Die Empfängerplatine übernimmt mit SPI(Master) diesen Wert. Wie tobi 
schrieb, ist es wohl maso-mässig diese floatzahl im Assemblerprogramm 
des Empfängers weiter zuverarbeiten.
Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal 
solange dauert.

Besten Dank!
Moderator (Firma: Titel) Persönliche Seite #2103030
Lesenswert?

König Artus schrieb:
> Die Sensorelektronik gibt über SPI(Slave) eine floatzahl aus(4 Byte).
Das macht nur Sinn, wenn die Dynamik des Signals es erfordert. Das ist 
hier augenscheinlich nicht nötig...

Was ist das für eine "Sensorelektronik"?

Serieller schrieb:
>> Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal
>> solange dauert.
> Halb so lange...
Hätte ich auch getippt: 32 Bit (float) vs 16Bit (short)...
Gast #2103819
Lesenswert?

> Da sind 16-Bit doch handlicher, auch wenn die Übertragung viermal
> solange dauert.

Halb so lange...

Ähm..
"Bedecket mein Haupt nun, es muss erst gereinigt sein"(Aus "Die 
Zauberflöte")


Lothar Miller schrieb:
> Du definierst einfach: Zahlenbereich -2000...8500 und schwuppdiwupp
> passt das locker in eine 16-Bit Zahl...

So, zwischen "schwuppdi" und "wupp" hakt es jetzt. ;-)

Nachdem was ich mir erlesen habe kommt da ein 16-Bit 2er-komplement in 
Frage. Wie konvertiere ich eine float in das 2er-komplement?

Ich hab mal folgendes gemacht:

float a;
signed int b;

b = a;

In b steht zwar das 2er-komplement von der Ganzzahl von float a, aber 
eine Auf/Abrundung der ersten Nachkommastelle von float a wird nicht 
berücksichtigt.

Gibt es da vielleicht Bibliotheksroutinen?

Vor lauter Bäumen seh ich den Wald nicht mehr.
Gast #2103874
Lesenswert?

Helmut Lenzen schrieb:
> Du willst ja eine Nachkommastelle haben.
>
> Also von 2000 .. 8500

Ja, von -2000 bis +8500.

Das Geheimniss mit der +0.5 war mir neu. Ich hab jetzt folgendes 
gemacht:

float a;
signed int b;

if(a < 0)
    b = 10 * a - 0.5; // -2000 bis <0
    else
        b = 10 a + 0.5; // 0 bis 8500


Besten Dank für deine Hilfe!

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