mikrocontroller.net

Forum: Compiler & IDEs Speicherverlust bei Interrupt


Autor: Thom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen Interrupt-gesteuerten Timer gebastelt, der mir sec, min, 
hour über usart ausgeben soll. funktioniert auch soweit.

jetzt habe ich zusätzlich einen Externen Interrupt eingebaut, der es mir 
erlaubt die Zeit nur auf Tastendruck über die serielle schnittstelle 
auszugeben. Dabei rufe ich meine "usart_tx"-funktion in der ISR() des 
externen Inetrrupts auf.

Das Problem ist:
nach jedem Externen Interrupt, beginnt der Timer wieder von vorne. 
sprich die werte (sec, min, h) werden zurückgesetzt.

woran liegt das, muss ich die Timer-Variablen irgendwo sichern/kopieren, 
bevor ich sie an die Uart-Ausgabe übergebe? habe sie als "volatile 
unsigned int" deklariert.

Danke im Voraus

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du landest aufgrund eines Programmfehlers im Reset oder an Adresse 0. 
Den Rest hat mir die Glaskugel nich varraten.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thom,

beim Eintritt in die Interruptroutine solltes du die Register, die du 
veränderst mit PUSH auf dem Stack sichern. Und am Ende mit POP in 
umgekehrter Reihenfolge wieder herstellen (FILO).

Gruß
Stefan

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quelltext?
Als Anhang.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Wenn ich bei meinem Auto zuviel Gas gebe, klapperts vorne links. Was 
ist da nicht in Ordnung?"

Das kann ungefähr 328 verschiedene Gründe haben. Ohne Source darfst Du 
mehr als irgendwelche Ins-Blaue-Vermutungen nicht erwarten.

Autor: Thom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sry, für den fehlenden quelltext. habs jetzt angehängt. hoffe, das liest 
jetzt noch einer.

anbei main.c und die uart_funktionen

grüsse
thom

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du aktivierst den Timer1A Compare Match Interrupt, hast aber keine 
Handler dafür...

Autor: Thom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den hab ich noch wegen der auskommentierten pwm-ausgabe aktiviert. das 
problem bleibt aber bestehen, auch wenn ich den timer1 compare-match 
interrupt nicht aktiviere.
du meinst doch das setzen des OCIE1A-Bits, oder? (TIMSK =(1<<OCIE1A)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast auch noch den Transmit Complete Interrupt enabled ohne einen 
Handler dafür zu haben.

Wenn dein µC resettet, dann hat das meistens 2 Ursachen
* ein Hardwareproblem, welches die Versorgungsspannnug versaut
* irgendein Interrupt, für den es keinen Handler gibt ist eingeschaltet.
  Sowas findet man, indem man alle Konfigurationen durchgeht und
  nachsieht welche Bits in die Konfig-Register geschrieben werden.
  Und zwar ausnahmslos alle!

Autor: Thom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die hilfe. hab das transmit complete Interrupt enable 
deaktiviert, jetzt läufts ohne probleme:)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.