Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Martin, > > > Hallo Zusammen, > > > > Ich versuche eine Handvoll long und int im > > Segment 1 zu speichern. Damit ich mich auf Dauer nicht > > mit den Adressen vertuhe soll es eine Universalroutine richten. > > > > Ich kann auch erfolgreich wüste Zahlen aus dem Flash lesen, > > aber mein Schreibversuch ändert nichts. > > Ich gehe davon aus, daß flash.hex in Segment 3 geladen wurde, > da lesen möglich ist? > > Wichtig beim Umgang mit dem Flash ist, daß nicht übermäßig gelöscht wird. > Nach dem Löschen eines Flash-Segements macht es keinen Sinn, anschließend > auszulesen, da gelöscht. ;-) > Für Werte, die oft geändert werden sollen, wäre ein I²C-Bus-EEprom besser. > > Bitte verwende im Forum die code-Tags für C2-Quellcode. > > > > Ich hoffe, dass ich irgendeinen dummen Fehler gemacht habe. > > writeLong antwortet mit 0. > > Du wertest den Rückgabewert des Schreibzugriffs auch nicht aus. > > <code> function rw_long (long wert) returns long > { > if ask == 1 > wert= flash.readLong(segment, addr); > else > flash.writeLong(segment, addr, wert); > // Rückgabewert der Schreibaktion wird nicht ausgewertet, > // somit: woher soll der Wert "0" kommen? > > addr = addr + 4; // wird immer gleich hochgezählt > return wert; > // wert ist hat nach dem Schreiben denselben wert, wie übergeben > } > </code> > > > Die funktion saveload erscheint mir wenig sinnvoll: > <code> > function saveload() > { > long wert; > > segment=1; > addr=2; > if ask == 0 // wer nicht fragt, will was schreiben! > { > flash.DelSeg (segment); > lcdext.print(" del "); > } > > wert=Arm.hebel; > Arm.hebel = rw_long (wert); > > wert=Stiel.hebel; > Stiel.hebel = rw_long (wert); > > ... > } > </code> > Das Löschen sollte wirklich nur im Einzelfall erfolgen. > Wenn die Variable "ask" versehentlich auf 0 bleibt, vernichtest Du > sehr schnell das Flashsegment. > Die Anzahl an Löschzyklen ist auf 100.000 begrenzt! > Nutze getrennte Funktionen/Routinen für das Schreiben und Lesen. > Stelle sicher, daß es niemals zu Endlosschleifen beim Löschen kommen kann. > Wenn es sich um Konfigurationsdaten handelt, die im Flash gespeichert > werden sollen, nutze feste Adressen für die Speicherstellen. > Sind es Werte, die sich oft ändern, z.B. Positionsdaten von Schrittmotoren, > so nutze bitte ein I²C-Bus-EEProm statt Flash. > > > Grüße, > André H.