Forum: Mikrocontroller und Digitale Elektronik float's in den Flash


von Maike (Gast)


Lesenswert?

Hallo miteinader,

das ist jetzt bestimmt für euch ganz einfach, aber ich weiss nicht wie.
Also ich habe zwei Funktioen SetWordFlash und GetWordFlash, damit kann 
ich word Variablen in den Speicher schreiben. Aber wie muss ich das 
machen wenn ich Kommazahlen in den Speicher schreiben will? Kann man die 
irgend wie umwandeln und dann wieder zurückwandeln? Ich programmiere in 
C mit dem Codewarrior.

Danke, Maike

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jedes im Speicher vorhandene Objekt, sei es eine Variable vom Typ 
uint8_t, int32_t, float oder auch ein String, ist letztlich nur eine 
Folge von einem oder mehreren Bytes im Speicher. Und als genau diese 
kann so ein Objekt auch ins Flash geschrieben werden.


Das kann dann in etwa so aussehen:
1
float Wert;
2
uint8_t* pSpeicher;
3
pSpeicher = (uint8_t *) &Wert;
4
5
for (i = 0; i < sizeof (float); i++)
6
{
7
  write_byte_to_flash(pSpeicher[i], StartadresseImFlash + i);
8
}

(Hier mal angenommen, daß die Flash-Beschreibe-Funktion als ersten 
Parameter das zu schreibende Byte und als zweiten Parameter die Adresse, 
an die dieses Byte geschrieben werden soll, erwartet)

Und umgekehrt siehts ganz genauso aus:
1
float Wert;
2
uint8_t* pSpeicher;
3
pSpeicher = (uint8_t *) &Wert;
4
5
for (i = 0; i < sizeof (float); i++)
6
{
7
  pSpeicher[i] = read_byte_from_flash(StartadresseImFlash + i);
8
}

(hier mal angenommen, daß die Flash-Lese-Funktion als Parameter die zu 
lesende Adresse übergeben bekommt und als Ergebnis das gelesene Byte 
liefert)

von Maike (Gast)


Lesenswert?

Hallo Rufus,

Wow, das ist ja wie aus einem Lehrbuch. Danke für die Mühe. Jetzt hab 
ich das auch verstanden und funktionieren tut es auch. Dankeschön.

Grüsse, Maike

von Maike (Gast)


Lesenswert?

Hallo,

eine Frage hab ich doch noch dazu. Wie bekomme ich den ausgelesenen 
Speicherwert, wieder in float umgewandelt?

Danke, Maike

von Rahul, der Trollige (Gast)


Lesenswert?

>Wie bekomme ich den ausgelesenen Speicherwert, wieder in float >umgewandelt?

Brauchst du doch gar nicht. Die sind duchr die Auslese-Prozedur schon 
gewandelt.

von Maike (Gast)


Lesenswert?

Hallo Rahul,

Durch die Auslese Prozedur steht ab der Startadresse von pSpeicher die 
Float Zahl z.B als abcd 1234 0000 0001.
Jetzt möchte ich aber gerne das ganze wieder als float Variable. Dazu 
muss ich doch erst noch was machen, oder hab ich da ein Brett vorm Kopf?

Danke, Maike

von Rahul, der Trollige (Gast)


Lesenswert?

>pSpeicher = (uint8_t *) &Wert;
pSpeicher ist aber auch gleichzeitig die Adresse der Float-Variablen.

von Rahul, der Trollige (Gast)


Lesenswert?

>oder hab ich da ein Brett vorm Kopf?

Wenn du quer durch Türöffnungen gehen musst, solltest du überlegen, 
einen Tischler aufzusuchen...

von Maike (Gast)


Lesenswert?

Hallo Rahul,

ja, so gehts.

Die Türen sind hier so breit da merkt man das manchmal garnicht.

Grüsse, Maike

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.