Gast
#4106454
Gibt es eine Möglichkeit, eine Funktion einmalig aufzurufen welche Variabeln nach anlegen der Spannung initialisiert, ich möchte nicht nach jedem reset bzw nach interrupt rückkehr neu initialisieren.
|
Anzeige
|
Funktion zur variabeln initialisierung
Gast
#4106454
Gibt es eine Möglichkeit, eine Funktion einmalig aufzurufen welche Variabeln nach anlegen der Spannung initialisiert, ich möchte nicht nach jedem reset bzw nach interrupt rückkehr neu initialisieren. Eine etwas deutlichere Beschreibung des Problems könnte helfen. Dass bei Reset alles neu initialisiert wird ist i.d.R. Absicht. Abhängig von der Entwicklungsumgebung lassen sich Speicherbereiche definieren, die einen Reset unverändert überleben, sofern die Spannung erhalten blieb. Bei Powerup- oder Brownout-Reset kann man dann eine explizite Initialisierung vornehmen, aber es bei Watchdog- und Pin-Reset unterlassen.
Gast
#4106472
Ich habe ein Interrupt, es verändert Variabeln welche ich im Hauptprogramm weiter nutze, komme ich aus dem Interrupt zurück wird ein Reset ausgelöst was ich generell schon ich sag mal schwachsinnig finde da ja von Timer bis zum LCD alles neu initialisiert wird mit werten, die schon in den jeweiligen Registern stehen. Nun möchte ich einmalig bei Programmstart sobald die Spannung kommt, gewisse Variablen einen Startwert geben der soll sich aber nicht mit jedem Reset wieder einstellen. Nun habe ich überlegt, die Variablen bei beenden des Interrupts auf den Stack zu retten und nach dem Reset wieder vom Stack zu holen doch auch da ist das Problem, dass der Stack dann bei neustart des Programms ganz andere Werte holen würde als wenn er schon Mal ein Interrupt hatte. Dann hatte ich eine Variable erstellt, vor Initialisierung frage ich ob sie 0 ist wenn ja Initialisiere, nach Initialisierung gebe ich ihr ein Wert was die Initialisierung überspringt doch da ist das Problem Wird ein Reset durch das Interrupt ausgelöst ist alles okey, wird das Reset ausgelöst weil ich neu Programmiere so ist die Variable immer noch 0xFF und daher wird nicht initialisiert. Was ich genau möchte ist, die initialisierungsphase überspringen wenn er aus einem Interrupt kommt, jedoch aufgerufen wird wenn er programmiert wurde bzw die Spannung neu anliegt.
Gast
#4106477
theodor schrieb: > komme ich aus dem Interrupt zurück wird ein > Reset ausgelöst was ich generell schon ich sag mal schwachsinnig finde > da ja von Timer bis zum LCD alles neu initialisiert wird mit werten, die > schon in den jeweiligen Registern stehen. Warum ist das so? theodor schrieb: > Ich habe ein Interrupt, es verändert Variabeln welche ich im > Hauptprogramm weiter nutze, komme ich aus dem Interrupt zurück wird ein > Reset ausgelöst was ich generell schon ich sag mal schwachsinnig finde Normalerweise geht es bei Rückkehr von einem Interrupt exakt da weiter, wo unterbrochen wurde, nicht mit Reset. Andernfalls sitzt das Problem wahrscheinlich zwischen Stuhl und Tastatur (das PEBKAC Phänomen).
Gast
#4106481
Zwischen stuhl und Tastatur befände sich nur die Maus...
Nach Interrupt und nach jedem Reset wird doch der Resethandler aufgerufen oder verstehe ich das falsch. So wie AK das sagt währe es ja super. theodor schrieb: > Zwischen stuhl und Tastatur befände sich nur die Maus... In der Art "in the internet, noone knows I'm a mouse"?
Gast
#4106486
theodor schrieb: > Nach Interrupt und nach jedem Reset wird doch der Resethandler > aufgerufen oder verstehe ich das falsch. Jein. Aus einem Interrupt wird per RETI zurück gesprungen. Das sorgt dafür, dass die zuletzt auf dem Stack gespeichte Adresse angesprungen wird.
Gast
#4106488
theodor schrieb: > Zwischen stuhl und Tastatur befände sich nur die Maus... Während der Programmentwicklung sollte sich da noch etwas mehr befinden.
Gast
#4106491
Dank euch, so ist das wenn man nichts ausprobiert, ich habe den Leuten geglaubt die mir mist erzählt haben und es einfach Probiert, AK hast rechts ich kann bei Initialisierung Variablen verändern diese bleiben nach dem Interrupt und werden nicht neu gesetzt. So bin ich zufrieden. Antwort schreiben |
Anzeige
|