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!
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.
Ok dankeschön! Gibts ne Möglichkeit, wie ich den Typ von Keil in den Typ von C# umrechne und umgekehrt?
Uralte Erfindung. Nennt sich American Standard Code for Information Interchange, kurz ASCII. Mit etwas Glück sind aber die "float"s kompatibel. Mit oder ohne Bytevertauscherei.
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...
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.
Auf der einen Seite mit sprintf ausgeben, übertragen und auf der anderen Seite mit sscanf einlesen - und umgekehrt. Gegebenenfalls eine eigene Routine schreiben.
Oder noch einmal ganz genau darüber nachdenken, wie sinnvoll float oder gar double für die gewünschte Anwendung ist...
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.