Forum: Mikrocontroller und Digitale Elektronik Variableninhalt bei Reset behalten


von Karl-Heinz M. (schnapsglas)


Lesenswert?

Hallo,

ich bastel ein Programm für den AVR m8 zusammen, dass u. a. eine Uhr 
enthält. Nun hätt ich gerne, dass die Variablen Std/Min/Sek ihre Werte 
behalten, wenn ich Reset betätige. (Eeprom ist anderweitig verplant und 
eine Backupbatterie gegen Stromausfall gibt es eh).

Mein Fragen:

a) Behält der RAM die Werte bei einmal Reset-Taster drücken? Behält er 
sie bei ISP-flashen?

b) Wie schalte ich die Initialisierung seitens des avr-gcc aus? Habe 
schon hier nachgeguckt und nichts gefunden:
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_varinit

Ich hatte zwischendurch die Idee, die Zeit über einen Pointer auf _end + 
meine_Stelle zu speichern, aber im Manual steht drin, dass z. B. printf 
auf malloc zugreift. Also ist das keine gute Idee.

von Schleby N. (schleby)


Lesenswert?

wie wäre es mit einem zusatzlichem eeprom

: Bearbeitet durch User
von Bernie (Gast)


Lesenswert?

Für 2..3 Byte kein Platz im EEPROM?

Schade!
Dumm gelaufen. Vergiss das Projekt... :-(

von Lutz H. (luhe)


Lesenswert?

Dafür hat man im PC einen Schaltkreis mit Batterie,
wäre das eine Lösung?

von Stefan E. (sternst)


Lesenswert?

Karl-Heinz Meyer schrieb:
> a) Behält der RAM die Werte bei einmal Reset-Taster drücken? Behält er
> sie bei ISP-flashen?

Ja. Nein.


Karl-Heinz Meyer schrieb:
> b) Wie schalte ich die Initialisierung seitens des avr-gcc aus?

Variablen in die .noinit Section legen.

http://www.nongnu.org/avr-libc/user-manual/mem_sections.html

: Bearbeitet durch User
von Karl-Heinz M. (schnapsglas)


Lesenswert?

Bernie schrieb:
> Für 2..3 Byte kein Platz im EEPROM?

2..3 Byte schon, aber kein Platz für einen Ringspeicher... 1000000 ( 24 
* 60 ) < 70 d.h. Eeprom bald kaputt.

So richtig wichtig ist's nicht, ich dachte nur, vielleicht kenn jemand 
auf die Schelle eine Trick. Eine Idee hab ich noch, ich meine, malloc() 
initialisiert nicht, dass könnte dann gehen. Ich werds ausprobieren.

von Karl-Heinz M. (schnapsglas)


Lesenswert?

Stefan Ernst schrieb:
> Variablen in die .noinit Section legen.

Danke funktioniert!

von Stefan N. (stefan_n)


Lesenswert?

Externer RTC-Chip wäre auch eine Lösung :)

von Lutz H. (luhe)


Lesenswert?

Wo ist die .noinit Sektion , bzw wo lege ich diese in sinnvoller Weise 
hin?
Bei mir sind die Variablen _sbss und _ebss nicht definiert, und deshalb 
0.

von Lutz H. (luhe)


Lesenswert?

Jetzt geht es auch bei mir :-) So einfach, manchmal hilft weniger.

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.