- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: Subroutinen durch Interrupt beenden

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594

    Subroutinen durch Interrupt beenden

    Ich probiere gerade mit Interrupts rum...
    Funktioniert soweit auch alles prima, er springt bei Knopfdruck und tut was er soll.
    Ich aber verschiedene Unterprogramme, von denen immer eines laufen soll. Wenn INT1 gezündet wird, dann erhöht er einen Zähler und dann kommt der RETURN zurück.
    Die Hauptschleife ist einfach nur ein DO/LOOP wo über SELECT/CASE der Zähler ausgewertet wird und dann die entsprechende SUB angesprungen wird.

    Jetzt die eigentliche Frage:
    Eines der Unterprogramme ist recht lang, daher würde ich diese SUB gerne über den Interrupt beenden. Ist das möglich?
    Aus Code-Größengründen (Tiny2313) möchte ich ungerne ständige Abfragen (IF Zähler THEN) in das Unterprogramm einbauen, weil da einige Schleifen drin sind.

    Gibts hier eine elegante Lösung?

    Stefan Z

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Verträgt das denn die SUB, daß sie mittendrin abgemurkst wird ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Jo, klar, das is egal.. Nix wildes, kann bedenkenlos abgeschossen werden.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    Da Du den Zeitpunkt des Interuptes nicht kennst, weißt Du auch nicht aus welchem Unterprogramm die Routinen gerade 'herausgerissen' wurden.
    Du müßtest also feststellen , ob der Interrupt in einem Unterprogramm oder im Hauptprogramm erfolgte und dementsprechend den Stack zurücksetzen sowie die Adresse, an der das Programm landen soll auf den Stack legen.Das alles in der Interruptroutine.Mit dem RETI holt er sich die abgelegte Adresse vom Stack und macht da weiter.
    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ah stimmt, das hatte ich garnicht bedacht...
    Da die Routinen aber alle eher unwichtig sind, bzw, deren Parameter sowieso von einander ausgelöscht werden (ist nur ein RGB-Fader), würde ich einfach gerne den Zähler erhöhen und dann zurück in die Hauptschleife.
    Wenn es in der Hauptschleife passiert, dann soll er natürlich nix machen, bzw. die Hauptschleife neu sterten.
    Ich sehe schon, dass wird nicht ohne Inline-Assembler gehen, oder?
    Welche Register muss ich denn womit manipulieren? Ist ein ATTiny2313 DIP-20...

Berechtigungen

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

LiFePO4 Speicher Test