Float in I2C-EEPROM und zurück

Gast #32643
Hallo,
ich sollte auf einem 8051, in C programmiert, Floatvariablen aus dem Ram 
(Xdata) über einen I2C-Bus in ein EEPROM schreiben und auch wieder 
auslesen. Die Kommunikation mit dem EEPROM selbst funktioniert, nur habe 
ich das Problem, die Floatvariable in einzelne Bytes zu zerlegen bzw. 
aus den einzelnen Bytes aus dem EEPROM wieder die gewünchte Variable im 
Ram zusammen zu bauen.

Gruss
Gregor
Gast
also ich würd in vc++ sowas machen....

float *fTmp=new float;
char *cTmp=(char *)fTmp;

*fTmp=<float-wert>;

for (int i=0;i<sizeof(float);i++) {
  I2C_Write(cTmp[i]);
}

so in die richtung sollte das hinhaun...
einfach einen float-pointer in einen char-pointer umcasten und dann die 
bytes durchgehn (ich hoff mal es gibt ein sizeof bei dir...sonnst im 
manual nachschaun wie viele byte der float hat)

73 HG
Gast
Also so bekomme ich das nicht zum laufen. Mein Compiler versteht erstens 
nur reines ANSI-C und zum zweiten sind meine C-Kenntnisse in bezug auf 
Pointer recht dürftig. Vielleicht hat ja jemand einen fertigen C-Code ??

Gregor
Das ist doch ANSI-C.

Aber mit "so bekomme ich das nicht zum laufen" kann keiner was anfangen.

Du must Dir schon die Fehlermeldung des Compilers anschauen und im 
C-Manual nachsehen, was sie bedeutet.

Ohne genügend C-Kenntnisse wirst aber nicht weiterkommen bzw. wirst Du 
nicht in der Lage sein, auch ein fix und fertiges Beispiel in Deinen 
Code mit einzubinden.


Peter
Gast
Hallo zusammen,
also, ich habe jetzt eine lauffähige Lösung.

@Peter: Wenn ich den obigen code compiliert habe, habe ich über 20 
Warnungen und Fehler vom Compiler bekommen und wenig Lust verspürt, die 
alle einzeln zu beheben.
Nachdem ich mich jetzt eine Weile mit den Pointern beschäftigt habe, 
läuft das ganze.

Trotzdem vielen Dank.

Gregor
Gast
Hallo Gregor,
für solche Zwecke legt man doch am Besten ein union an:

   ...
   union {
     float f;
     char c[4];
   } u;
   ...

   ...
   u.f = 'float-value';
   for ( i = 0; i < 4; i++ )
     I2C_Write(u.c[i]);
   ...

Gruß,
Olaf
@Gregor,

durch die Anzahl der Fehler darf man sich nicht entmutigen lassen.

Es kann durchaus sein, daß ein einziger Fehler über 1000 Folgefehler 
verursacht. Deshalb kann man bei den meisten Compilern einstellen, nach 
wieviel Fehlern sie abbrechen.


Am sinnvollsten ist es daher, nur den ersten Fehler zu beheben und dann 
neu zu compilieren.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 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.