-         

Ergebnis 1 bis 7 von 7

Thema: Probleme mit Interrupt-Rückkehr

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19

    Probleme mit Interrupt-Rückkehr

    Anzeige

    Hallo,

    bei mir funktioniert die Rückkehr aus einen Interrupt nicht korrekt.
    Ich habe ein Menü programmiert bei dem ich 2 Auswahlmöglichkeiten habe.
    Entweder mit einem "setup" fortfahren oder "exit". Leider muss ich den Exit Taster immer 2 mal drücken um das Menü verlassen zu können. Sonst funktionier alle.
    Hier ein Teil des Codes (ich weis, GOTO ist nicht so ideal, habe es aber auch schon anders probiert "Loop Until... usw.", aber immer dasselbe Ergebnis)

    Isr_pcint1:
    'Menue
    Waitms 200
    Cls
    Do
    Locate 1 , 1
    Lcd "Setupmenue:"
    Locate 3 , 1
    Lcd "[Setup] to enter"
    Locate 4 , 1
    Lcd "[Exit] to leave"
    If Pinc.2 = 0 Then Goto Stunde
    Loop Until Pinc.5 = 0
    Waitms 200
    Cls
    Return

    'Hier gehts dann weiter mit Label Stunde: usw...
    Danke schonmal

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Stackgrößen mal hoch gesetzt? Das ist immer ein beliebtes Problem...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19
    Danke, war nen Versuch wert.

    Hat aber leider nicht geholfen.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    ich weis, GOTO ist nicht so ideal
    Ich gehöre zwar nicht zu den Leuten, die Glaubenskriege über GOTO ausfechten. Um genau zu sein verwende ich diesen Befehl sogar außerordentlich gerne (man muss nur schlau genug sein, um den Überblick zu behalten).

    ABER:
    Wenn Du eine ISR mit ´nem GOTO verlässt, kann es nicht nur sein dass sich das Programm aufhängt, sondern es wird definitiv passieren. So sicher wie das Amen in der Kirche, weil der Stack total schnell überläuft. Egal, wie groß er definiert ist.

    Also: If PinC.2 = 0 then Flag setzen, und das Flag dann in der Hauptroutine abfragen. Anders kann´s nicht gehen

    Und Do-Loop-Schleifen in der ISR... ich weiß ja nicht, vielleicht geht das ja auch anders?

    Aber schmeiß erstmal das Goto Stunde raus, dann müsste es schon laufen!

    MfG,

    Daniel

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    WAITMS in ner ISR ist eh "verboten" - also macht keinen Sinn, dass der µC seine Zeit in der ISR verballert... Versuch das lieber mit Flags zu lösen, die du dann im Main-Loop abarbeitest!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Beiträge
    19
    Irgendwie komm ich nicht weiter.
    Ich hab jetzt sogar mal den Code total minimiert:

    Isr_pcint1:
    'Menue
    Cls
    Do
    Locate 1 , 1
    Lcd "Setupmenue:"
    Locate 3 , 1
    Lcd "[Setup] to enter"
    Locate 4 , 1
    Lcd "[Exit] to leave"
    Loop Until Pinc.5 = 0
    Cls
    Return
    Leider noch keine Änderung.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Auch LOOP UNTIL macht in einer ISR nicht wirklich Sinn...
    Die einzigen Fehlerquellen die mir noch einfallen sind:
    A - PCINT1 wird dauerhaft ausgelöst und er startet immer wieder neu
    B - PINC.5 wird nie 0 (mal manuell testen, Pullup an, wasauchimmer)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •