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
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)
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
Hallo, eine Frage hab ich doch noch dazu. Wie bekomme ich den ausgelesenen Speicherwert, wieder in float umgewandelt? Danke, Maike
>Wie bekomme ich den ausgelesenen Speicherwert, wieder in float >umgewandelt?
Brauchst du doch gar nicht. Die sind duchr die Auslese-Prozedur schon
gewandelt.
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
>pSpeicher = (uint8_t *) &Wert;
pSpeicher ist aber auch gleichzeitig die Adresse der Float-Variablen.
>oder hab ich da ein Brett vorm Kopf?
Wenn du quer durch Türöffnungen gehen musst, solltest du überlegen,
einen Tischler aufzusuchen...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.