mikrocontroller.net

Forum: Compiler & IDEs Float-4Byte-Float


Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich habe ein kleines Problem und zwar:

Ich möchte eine Variable vom Typ Float in
4 Bytes zerlegen, im I2C EEPROM ablegen,auslesen und
am Display anzeigen.

Das Problem ist nicht das Senden und Empfangen,sondern
das Umwandeln der float variable in die 4 Bytes bzw. umgekehrt.

Lg Toni.

Autor: Daniel Jelkmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Toni!

Ich weiss nicht ob es gerade die einfachste und schönste Lösung ist,
aber Du könntest das Konvertieren zum Beispiel so machen:

// float in 4 bytes zerlegen
float x = 3.141596;
unsigned char * float_pointer = (unsigned char*)&x;
unsigned char b[4];

b[0] = *float_pointer++;
b[1] = *float_pointer++;
b[2] = *float_pointer++;
b[3] = *float_pointer++;

// und die 4 bytes wieder zu einem float zusammensetzen
float y;
float_pointer = (unsigned char*)&y;

*float_pointer++ = b[0];
*float_pointer++ = b[1];
*float_pointer++ = b[2];
*float_pointer++ = b[3];

// zur Kontrolle ausgeben
printf("%e  %e\n", x, y);



Dabei wird einfach über einen Zeiger auf den Speicherplatz des Floats
zugegriffen und die Werte der 4 Bytes der Reihe nach ausgelesen und in
das Array b gespeichert. Das Rückschreiben funktioniert genauso, nur
sind die Zuweisungen andersherum...

MfG
  Daniel Jelkmann

Autor: Daniel Jelkmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi nochmal,

das printf(); hatte ich übrigens nur zur Kontrolle reingesetzt, um zu
verifizieren, dass der Code auch macht was er soll... Das printf() gibt
Text auf der Standardausgabe aus, beim AVR wird das mit dem printf()
daher wohl schwierig ;) einfach wegdenken die Zeile...

MfG
  Daniel Jelkmann

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Daniel.

Danke für deine rasche Hilfe.

Habe soeben deinen Teil ausprobiert.
Funktioniert.

Lg Toni.

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.