Variable in nicht-flüchtigem Speicher

#4161085
Lesenswert?

Hallo, ich bin neu was Mikrocontroller angeht und habe folgendes 
Problem:
Ich brauche für ein Programm mehrere uint16_t[11] arrays, die sich lesen 
sowie beschreiben lassen und nach einem Stromverlust ihre Werte nicht 
verlieren.

Ich habe bisher einen Artikel über PROGMEM gelesen, leider kann ich mit 
meinem bisherigem Wissensstand nicht sehr viel damit anfangen.

Ich hoffe auf eine möglichst einfache Erklärung, wie ich eine Variable, 
die sich während des laufenden Programmes verändert, auch nach einem 
Power-off wieder verfügbar habe.

Grüße
Niun

avr-gcc, ATMega16
#4161108
Lesenswert?

In welchen Zeitabständen bzw. wie oft verändert die sich denn zwischen 
dem An-/Abschalten?

Wenn die Werte jederzeit gesichert werden müssen und sich in schneller 
Folge ändern, dann kannst Du bei der Verwendung des internen 
EEPROM/FLASH u.U. auch schnell die Anzahl der garantierten Schreibzyklen 
erreichen.
Vielleicht wäre dann der einfachste Weg die Batteriepufferung des uC als 
Absicherung gegen Ausfall und ein wegsichern der Inhalte in größeren 
Zeitabständen.
#4161132
Lesenswert?

Ingo Less schrieb:
> Martin Luerssen schrieb:
>> FLASH
> Soweit ich weiss kann man hier aber nur Konstanten speichern, diese aber
> nicht ändern!

Jeder halbwegs moderne Mikrocontroller kann sein eigenes Flash 
manipulieren. Natürlich muss das mit vorsicht verwendet werden, da man 
sonst ruck zuck seine Applikation löscht. Auch die Schreibzyklen sind 
stark begrenzt, aber es ist sehr wohl möglich, Flash als Speichermedium 
für Varibalen zu nutzen (wenn auch mit Software Overhead)
#4161138
Lesenswert?

Yep. Ist möglich, die sowohl ins Flash, als auch im EEPROM sicher zu 
lagern. Die Hauptfrage ist aber wirklich, wie oft das geschehen muss.
Wenn er seine Meßwerte(?) jede Sekunde ausfallsicher absichern würde, 
dann hätte er schon nach nicht mal 3 Stunden die angegebene Mindestzahl 
an Flash-Schreibzyklen erreicht, nach bischen über nem Tag die des 
EEPROM.
Wenn er alle Stunde mal sichert, spielt das keine soo große Rolle.
#4161170
Lesenswert?

Auch möglich wäre es, den µC über einen großen Kondensator zu puffern 
und beim wegfall der Eingangsspannung alle Variablen vom RAM in den 
EEPROM zu kopieren. Spart Schreibzyklen, ist dafür aber zusätzlicher 
Hardware Aufwand für Kondensator und Diode in der Versorgungsleitung, 
sowie ein Pin zum prüfen der Spannung. Funktioniert auch nicht mit jeder 
Spannungsversorgung einfach so.
#4161240
Lesenswert?

Hallo,
danke für die schnellen Antworten.
Die Werte müssen nicht häufig geändert werden, höchsten ein Mal am Tag.
Es handelt sich nur um Umgebungsvariablen die ab und zu über ein Menü 
angepasst werden.

Eine Puffer-Batterie fällt leider raus, das Gerät ist u.U mehrere Wochen 
ohne externe Spannungsversorgung.

Das Speichern im Flash klingt schon einmal gut, wie funktioniert das 
Ganze konkret? (Bitte in möglichst einfachen Worten)
#4161770
Lesenswert?

Danke für den Link.
Soweit ich das herausgelesen habe, werden die variablen einmal im Flash 
initialisiert und dann mittels "pgm_read_byte" wieder in den RAM 
geschrieben.

Das ist soweit klar, aber wie bekomme ich das ganze dazu, die !const! 
flash variablen zu ändern, also vom ram wieder zurück in den flash zu 
schreiben?
#4161809
Lesenswert?

@ Klaus:
Erfrischend freundlich.
Da es KEINE pgm_write Funktion zu geben scheint, worauf willst du 
hinaus?
Im Flash scheinen nur konstanten zu stehen, also danke für gar nichts.

@Karl Heinz:
Danke fürs Verdeutlichen, habe es jetzt kapiert.

eeprom_write_byte/eeprom_read_byte


Grüße
Niun
Gast #4161872
Lesenswert?

Meik W. schrieb:
> @ Klaus:
> Erfrischend freundlich.

Mist. Das wollte ich gar nicht.
Da muss ich wohl noch sarkastischer formulieren.

> Da es KEINE pgm_write Funktion zu geben scheint, worauf willst du
hinaus? Im Flash scheinen nur konstanten zu stehen, ...

Da schalten wir nochmal das Gehirn ein und überlegen was es denn sonst 
noch so für Speicher in Deinem uC gibt.

Aber das hat Karl Heinz ja schon für Dich getan.

>  ... also danke für gar nichts.
Also hast Du gar nichts selbst gedacht, erfahren oder versucht. Das hat 
Karl Heinz getan. Und gelesen hat er auch noch für Dich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren