[8051er] Double gleich Double von C#?

Gast #1791176
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
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
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
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 #1791251
Auf der einen Seite mit sprintf ausgeben, übertragen und auf der anderen 
Seite mit sscanf einlesen - und umgekehrt. Gegebenenfalls eine eigene 
Routine schreiben.
Gast #1791440
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.