Forum: Mikrocontroller und Digitale Elektronik Zustand speichern vor ausschalten


von blub (Gast)


Lesenswert?

Hallo zusammen

Bin noch ein bischen grün hinter den Ohren was embedded programming 
betrifft.

Hab einen MC9S12XDP und Programmiere in c++.
Über einige Taster kann der Benutzer Einstellungen vornehmen.
Mein Problem ist nun das ich es dem Benutzer ermöglichen soll nach dem 
aus- und einschalten wieder mit den alten Einstellungen weiter zu 
arbeiten.

Hab mir gedacht das ich die Einstellungen im EEPROM oder im Stack 
speichere. mein Problem ist nur wie mache ich das.
Wie ist der C++ Befehl um etwas auf die Stack Adresse zu speichern.

von Karl H. (kbuchegg)


Lesenswert?

blub wrote:

> Wie ist der C++ Befehl um etwas auf die Stack Adresse zu speichern.

Da wird dir nur jemand helfen können, der exakt den gleichen
Compiler benutzt wie du auch. C++ weiss nichts von EEPROM oder
dergleichen, daher wird sowas immer durch Erweiterungen in Form
von vorgefertigten Funktionen oder speziellen Schlüsselwörter
erledigt. Unnötig zu sagen, dass sowas keinerlei Norm unterliegt
und daher ist das von Compiler zu Compiler unterschiedlich.

Alternativ kannst du natürlich mal deine Hilfe bzw. das Handbuch
durchstöbern. Da steht sicher auch was zu dem Thema drinnen.

Und nein: Am Stack willst du das sicher nicht speichern.

von kommutator (Gast)


Lesenswert?

Üblicherweise legst Du Dir einfach ein struct/union z.B. 
"st_meineEinstellungen" an, in dem Du die Einstellungen ablegst die nach 
dem Start wiederhergestellt werden sollen, so dass alle Deine 
Einstellungen in einem zusammenhängenden (festen!!! nicht stack!!!) 
Speicherbereich liegen.

Beim Systemstart  liest Du dann die Daten immer aus dem EEPROM wieder in 
dieses struct/union und +wupp+ sind Deine Einstellungen 
wiederhergestellt.

Zum Abspeichern vor dem Ausschalten muss Dein System aber noch in der 
Lage sein, der SW mitzuteilen, dass gleich der Saft weggeht, bzw. gerade 
noch genug Zeit zum speichern im EEPROM bleibt.

Das Speichern selbst erledigst Du, indem Du dem EEPROM-Treiber/der 
Hardware mitteilst, dass Du sizeof(meineEinstellungen) Bytes ab 
RAM-Adresse *meineEinstellungen ins EEPROM ab Adresse 0x1234 schreiben 
willst. Für den S12X-Kern gibt es da mit Sicherheit schon etwas 
fertiges. Such mal nach s12x eeprom per google!

TIP: Hänge eine Prüfsumme an die Einstellungen an, die Du mit 
speicherst. Immer wenn die Prüfsumme nach dem Laden aus dem EEPROM nicht 
stimmt, belege die Einstellungen mit sinnvollen Default-Parametern.
Vertraue Parametern aus dem EEPROM nicht besonders (es sei denn, Du 
legst sie nach 2aus3 ab) - sprich: mache bei allen Parametern aus dem 
EEPROM plausibilitätskontrollen / wertebereich-checks. Hintergrund: Es 
kann Dir je nach Gestaltung der Prüsumme passieren, dass die Summe 
stimmt, aber die Daten trotzdem buggy sind.

Gruß,
C

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.