Forum: Mikrocontroller und Digitale Elektronik Variable nach reset nicht löschen


von variable (Gast)


Lesenswert?

hi,

ich habe einen stm32f103 und verwende keil µVision 4. ich speicher einen 
wert in einer Variable, der wert soll nach einem reset nicht gelöscht 
werden, was er aber tut. was muss ich machen das der Variablenwert 
unverändert bleibt. der stm32 hat auch eine batterie

von Dummschwaetzer (Gast)


Lesenswert?

__no init

von N. G. (newgeneration) Benutzerseite


Lesenswert?

im EEPROM speichern
bei der init in eine temporäre Var speichern
ich weiß allerdings nicht, ob dein MC diesen Nichtflüchtigen Speicher 
aufweist.

Ein C-Beispiel:
1
#include <avr/eeprom.h>
2
//+ den rest
3
4
//Zelle
5
uint8_t var_cell EEMEN=3;
6
//var
7
uint8_t var_tmp;
8
9
void init()
10
{
11
    var_tem=eeprom_read_byte(&var_cell);
12
}
13
14
int main()
15
{
16
    init();
17
    ///...
18
}

natürlich must du vor dem stromverlust die variable wieder in den EEPROM 
speichen, sonst brings alles nichts.
Und nein, der EEPROM ist zu langsam, um ständig in ihn zu schreiben und 
aus ihm zu lesen. Und er kan nur eine begrenzte Anzehl wieder 
beschrieben werden(siehe Dtaenblatt, ca. 10k).

von spess53 (Gast)


Lesenswert?

Hi

Ich habe zwar keine Ahnung von STM32 aber eine kurze Suche im Reference 
Manual nach 'Reset Source' fördert ein Register zu Tage, in dem die 
Resetquelle feststellen kann. Also kann man beim Programmstart passend 
reagieren.

MfG Spess

von variable (Gast)


Lesenswert?

das ist aber eine Variable die sich häufig ändert und wann die 
Versorgung ausfällt kann ich nicht vorhersagen

von Matthias (Gast)


Lesenswert?

Hier kannst du dir ein Beispiel zusammensuchen bei dem eine Variable 
nicht initialisiert wird.

http://www.keil.com/support/docs/3480.htm

von Karl H. (kbuchegg)


Lesenswert?

> und wann die Versorgung ausfällt kann ich nicht vorhersagen

> der stm32 hat auch eine batterie

Wenn die normale Versorgung nicht über die Batterie geht, dann hast du 
hier deinen Ansatzpunkt. Sobald auf Batterie umgeschaltet wird, ist der 
Zeitpunkt gekommen, mal einen Zwischenstand im EEPROM zu speichern.

Ansonsten musst du eben baulich dafür sorgen, dass nach Ausfall der 
regulären Versorgung der µC und das EEPROM noch für ein paar Sekunden 
Saft haben.

von amateur (Gast)


Lesenswert?

Wie - um alles in der Welt - verwendest Du den Reset?
Üblicherweise benutze ich diesen (indirekt) beim Einschalten. Hierbei 
hilft sowieso nur das EEPROM und wenn der Wachhund anschlägt. Dann aber 
sind gespeicherte Variablen bestenfalls zweifelhaft. Vor allem, wenn der 
Wauwau während des Speicherns zubeißt.

von amateur (Gast)


Lesenswert?

Wenn Dein Rechner nicht allzu gierig ist, was den Stromverbrauch 
betrifft, so entkopple ihn z.B. mit eigenem L05 oder so und einem 
ordentlichen Kondensator. Dann überwache den Leistungsstrang und sichere 
Deine Variablen, wenn dem die Puste ausgeht. Wenn Du Volldampf nicht 
benötigst, reicht vielleicht auch eine Reihendiode mit passendem "C".

von Verwirrter Anfänger (Gast)


Lesenswert?

Der STM32F103 hat auch 20 bytes battery backed registers.

Wenn du also eine unabhängige Spannungsquelle an VBat angeschlossen 
hast, kannst du dadrin solange 20 byte speichern, bis die Batterie den 
Geist aufgibt.

Wie man die genau nutzt weiss ich nicht, aber ich nehme an, dass man 
einfach an eine bestimmte Speicheradresse schreiben muss.

von Nooby (Gast)


Lesenswert?

Der STM32 hat keinen EEPROM aber dafür gibt es EEPROM  Emulation:
http://www.bdtic.com/DownLoad/ST/AN4061.pdf

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.