@ Siro
Verkürztes Zitat wie o.g. nur als Bestätigung:
"High-Endurance Flash Memory Address Range (1)
PIC12(L)F1571 -> 0380h-03FFh
PIC12(L)F1572 -> 0780h-07FFh
Note 1:
High-endurance Flash applies to the low byte of each address in the range."
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Oh supi Klebwax, das hab ich wirklich übersehen![]()
und auch nicht wirklich verstanden.
Jetzt geht mir aber grad ein Licht auf.
Es wurden "gute" und "schlechte" Flashspeicher verbaut.
Die "guten" mit wesentlich mehr Schreibzyklen wurden am Ende des gesamten Flashspeichers verbaut (nämlich die letzten 128 Bytes) und weiter vorne sind die "Schlechten"![]()
mit weniger garantierten Schreibzyklen....
Sieht man in den Memory Programming Specifications Table 26-5
Das ist ja ganz was Neues....
Auf jeden Fall vielen Dank Euch Beiden.
und ein schönes Wochenende
Siro
Geändert von Siro (18.11.2016 um 10:43 Uhr)
Ich erweitere mal meinen Thread, da es noch unmittelbar dazugehört.
zum Ablegen einer bestimmten Struktur oder Daten, hab ich folgendes probiert:
so kann ich an Speicherstelle 0x07F0 meine Struktur ablegen und auch
gleich initialisieren beim Programmieren des Chips
Ein MemoryDump (zumindest in der IDE) zeigt, dass meine Daten (Konstanten) tatsächlich auch dort gelandet sind
ich staune grad, ich kann so sogar direkt aus dem Array lesen:Code:const struct { U16 CalAtmV; U16 CalCount; U8 SoftVersionPre; U8 SoftVersionPost; U8 HardVersionPre; U8 HardVersionPost; } myCalData @0x07F0 = /* an fester Adresse ablegen */ { /* und gleich eine Initialisierung vornehmen */ 4000, 1023, 1, 0, 1, 0 };
das funktioniert, der Compiler scheint dafür den richtigen Code zu machen....Code:x = myCalData.CalAtmV;
muss das evtl. sogar volatile const sein ? tut zumindest nicht weh.
Geändert von Siro (18.11.2016 um 13:31 Uhr)
Mit const packt der Compiler (XC8 und XC16) Daten ins Flash, das ist normal. Das tut er auch, ohne daß du eine Adresse angibst. Du mußt nur aufpassen, daß er dir nicht von alleine irgendwelche andere Daten in diese 128 Byte packt.
Das folgt aus dem gesagten.ich staune grad, ich kann so sogar direkt aus dem Array lesen:
Doch tut es. Es verhindert, daß Zugriffe auf diese Variable optimiert werden. Und solange du die Daten nicht im Interrupt-Handler änderst, sind sie nicht volatile sondern das Gegenteil: const.muss das evtl. sogar volatile const sein ? tut zumindest nicht weh.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Lesezeichen