1 | void fnWriteFlash (unsigned int uiType, float fValue) |
2 | {
|
3 | float *Flash_ptr; |
4 | |
5 | _DINT(); |
6 | Flash_ptr = (float *) uiType; |
7 | FCTL1 = FWKEY + ERASE; |
8 | while(FCTL3 & BUSY); // Check Flash BUSY bit |
9 | FCTL3 = FWKEY; |
10 | FCTL1 = FWKEY + WRT; |
11 | *Flash_ptr = fValue; |
12 | |
13 | FCTL1 = FWKEY; |
14 | FCTL3 = FWKEY + LOCK; |
15 | |
16 | while(!(FCTL3 & WAIT)); // WAIT until Flash is ready |
17 | _EINT(); |
18 | return; |
19 | }
|
Das is meine Routine zum Speichern von Maximalwerten. Beim Initzialisieren des Flashs werden alle Daten korrekt geschrieben und ich kann sie auch ohne Probleme korrekt auslesen. Wenn ich nun einen Wert Aktualisieren möchte weil halt neuer Maximalwert gemessen wurde, Wird ein falscher Wert geschrieben. z.B. *Flash_ptr zeigt auf 0x1014 nach init hat er den Wert 20.0 fValue soll mit 99.0 beschrieben werden. nach der Zeile *Flash_ptr = fValue; steht an der Stelle 4.0 Ich kann leider nicht mittels dummy write das Segment löschen, da sonst alle Messewerte verschwunden sind. Hat einer Vorschläge? Danke