Float in I2C-EEPROM und zurück

Gast #32643
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
Gast #32644
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
Gast #32645
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
#32646
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
Gast #32647
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
Gast #32648
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
#32649
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren