Funktion zur variabeln initialisierung

#4106460
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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?
#4106478
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
Zwischen stuhl und Tastatur befände sich nur die Maus...
1
.org 0x0000
2
rjmp    Init           
3
.org OVF0addr
4
rjmp    timer0_overflow

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.
Gast #4106486
Lesenswert?
• ▲
▼
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 #4106491
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.