Forum: Mikrocontroller und Digitale Elektronik Float in I2C-EEPROM und zurück


von Gregor (Gast)


Lesenswert?

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

von HGSTaBRF (Gast)


Lesenswert?

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

von Gregor (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Gregor (Gast)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

@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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Das da oben ist kein C, sieht wohl eher nach C++ aus. Wenn man die 
Variablendeklaration repariert sollte es aber funktionieren.

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
Noch kein Account? Hier anmelden.