Forum: Mikrocontroller und Digitale Elektronik Cortex M0 Variable speichern


von N. S. (scheldor)


Lesenswert?

Hallo,

Ich hab mich jetzt schon einige Zeit mit dem LPC11c24 bzw. C14 
beschäftigt.

Im großen und ganzen läuft es auch gut.
Ich habe einen sehr rudimentären CANopen Slave programmiert, der 
Analogwerte aufnimmt, skaliert und als PDO versendet.

Jetzt zu meinem Problem:
Ich möchte die Parameter der Skalierung durch SDOs verändern habe aber 
keine Ahnung wie ich die übertragenen Werte speichern kann, so das sie 
nach dem Neustart noch da sind.

Es wäre super wenn mir jemand sagen könnte wie man das bei einem solchen 
ARM Controller üblicherweise macht.

Danke und Gruß

Scheldor

von Lothar (Gast)


Lesenswert?

Da der kein EEPROM hat muss es im Flash gespeichert werden. Hierzu gibt 
es laut Manual im ROM eine Library die man direkt aufrufen kann:

IAP Command Summary:
Prepare sector(s) for write operation
Copy RAM to flash
...

von bla (Gast)


Lesenswert?

Application Note zur EEPROM Emulation googlen. Damit kannst du mit einem 
Funktionsaufruf 16 Bit Werte permanent wegschreiben. Die hinterliegende 
Emulation sorgt dafür, dass die Werte auf eine Flash-Page hintereinander 
weggeschrieben werden. Ist die Page voll werden die letzten Werte 
gesammelt und auf eine neue Page geschrieben und die alte Page gelöscht. 
Dann geht das Prinzip von vorne los.

von Dr. Sommer (Gast)


Lesenswert?

Beachte, dass während des Speicherns der Werte in den Flash der 
Controller lahm gelegt ist. Steuert der also irgendeine Anlage, sollte 
die zuvor in einen "sicheren" Zustand gebracht werden...

von N. S. (scheldor)


Lesenswert?

Danke für die schnellen Antworten.
Leider habe ich keine Applicationnote/Lib für meinen Controller 
gefunden. Also muss ich das wohl selbst machen ;)

Wenn ich die Theorie richtig verstanden habe läuft das emulieren in etwa 
so ab:

Ich vergebe eine ID für eine VAR. Die id mit Daten schreibe ich in die 
erste Zeile der Page. Jedes weitere Datum schreibe ich darunter. Auch 
ein neueres Datum, von einer Var/ID die bereits gespeichert ist, 
schreibe ich  unter alles drunter.

 am Ende der Page suche ich von unten nach oben die aktuellsten werte 
und schreibe diese z.b. auf eine weitere Page. Die erste kann ich dann 
löschen.

Die Daten suche ich von unten nach oben um immer die aktuellste zu 
finden.

Ich hoffe bis hier stimmt das einigermaßen.

Jetzt bin ich mir noch etwas unsicher was die IAP betrifft:
Laut Datenblatt muss ich einen buffer im SRAM haben, den ich in den 
Flash kopiere. Die Start Adresse des Flash definiere ich.
Vor dem schreiben muss ich das mit Prepare... vorbereiten.
Wie läuft das mit den Sectorparametern? Kann ich so nur eine Zeile bzw. 
die Daten für eine Variable schreiben?
Wenn ja, woher weiß ich welches der nächste sector ist?

Ich hoffe man kann meine Fragen noch verstehen :D

PS. Wie mache ich dem Teil eigentlich klar das der buffer im SRAM sein 
soll ?

Vielen Dank für eure Hilfe.

Gruß Scheldor

: Bearbeitet durch User
von bla (Gast)


Lesenswert?

So in etwa. Du kannst dir die Libs auch vom STM32 ziehen und auf deinen 
Controller ummünzen.

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.