mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [8051er] Double gleich Double von C#?


Autor: Peter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok dankeschön!

Gibts ne Möglichkeit, wie ich den Typ von Keil in den Typ von C# 
umrechne und umgekehrt?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf der einen Seite mit sprintf ausgeben, übertragen und auf der anderen 
Seite mit sscanf einlesen - und umgekehrt. Gegebenenfalls eine eigene 
Routine schreiben.

Autor: Mine Fields (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder noch einmal ganz genau darüber nachdenken, wie sinnvoll float oder 
gar double für die gewünschte Anwendung ist...

Autor: Peter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.