Stackgrößen mal hoch gesetzt? Das ist immer ein beliebtes Problem...
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)
Danke schonmalIsr_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...
Stackgrößen mal hoch gesetzt? Das ist immer ein beliebtes Problem...
Danke, war nen Versuch wert.
Hat aber leider nicht geholfen.
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).ich weis, GOTO ist nicht so ideal
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
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!
Irgendwie komm ich nicht weiter.
Ich hab jetzt sogar mal den Code total minimiert:
Leider noch keine Änderung.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
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)
Lesezeichen