[8051er] Double gleich Double von C#?

Gast #1791176
Lesenswert?

Hallo!

Ich benutze den 8051 F330 und Keil µVision3 (C). Der µC kommuniziert 
über die Serielle Schnittstelle mit einem PC, genauer gesagt mit einem 
C# Programm. Ich möchte nun zwischen µC und C# double Werte austauschen, 
doch irgendwie werde ich das gfühl nicht los, dass C# und µVisions C 
andere Formatierungen für double verwenden?

Beipsiel µC:
double test = 26;
char* test2;
char asugabe_buffer[8];
int i;

test2 = (char*)&test;
for(i=0;i<8;i++) ausgabe_buffer[i] = test2[i];
//ausgabe_buffer enthält der reihe nach von 0 beginnend:
//0x41 0xD0 0x00 0x00 0x00 0x00 0x00 0x00
//(= 65 208 0 0 0 0 0 0)

Beispiel C#:
double test_value = 26;
byte[] test_data2 = new byte[8];
test_data2 = BitConverter.GetBytes(test_value);
Console.WriteLine("{0} | {1} | {2} | {3} | {4} | {5} | {6} | {7}", 
test_data2[0], test_data2[1], test_data2[2], test_data2[3], 
test_data2[4], test_data2[5], test_data2[6], test_data2[7]);
//Ausgabe: 0 | 0 | 0 | 0 | 0 | 0 | 58 | 64

Stimmt irgend etwas mit meiner Umwandlung nicht oder werden hier 
unterschiedliche Formate verwendet?

Danke für eure Hilfe!
#1791194
Lesenswert?

Peter S. schrieb:

> doch irgendwie werde ich das gfühl nicht los, dass C# und µVisions C
> andere Formatierungen für double verwenden?

Könnte man so sagen. Keil: "The double data type is identical to the 
float data type. Variables of type double are implemented using the same 
4-byte storage format as float types." Ist bei 8bit Mikros nicht 
ungewöhnlich. Kriegt man beispielsweise raus, indem man ein paar 
Sekunden in der Doku stöbert.
Gast #1791239
Lesenswert?

Achso eigentlich heißt das ja, das double auch nur 4 Byte benutzt? Gibts 
denn keine Möglichkeit einen 8 Byte floating point Typ zu benutzen beim 
µC? Das währe äußerst wichtig, da die Werte sehr genau sein müssen...
#1791246
Lesenswert?

Peter S. schrieb:

> Achso eigentlich heißt das ja, das double auch nur 4 Byte benutzt? Gibts
> denn keine Möglichkeit einen 8 Byte floating point Typ zu benutzen beim
> µC? Das währe äußerst wichtig, da die Werte sehr genau sein müssen...

Klar gibt es eine Möglichkeit. Funktionen für Fliesskommarechnung selber 
schreiben. Veilleicht gibt es auch Compiler mit 64bit double.
Gast #1791440
Lesenswert?

Stefan L. schrieb:
> Oder noch einmal ganz genau darüber nachdenken, wie sinnvoll float oder
> gar double für die gewünschte Anwendung ist...

Genau so hab ich es nun auch gemacht. Ich wandle den Gleitkommawert 
durch Multiplikation in einen Integerwert um und sende den, binär nicht 
ASCII kodiert da das unnötig viel Datenverkehr verursachen würde.

Danke für  eure 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