- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Nach ISR in beliebige Funktion springen? Wie? Inline-Asm?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    24.11.2008
    Alter
    33
    Beiträge
    60
    Anzeige

    Powerstation Test
    achso verstehe
    Der Stackrahmen der ISR wird zwar beendet, aber der "Müll der Mutterfunktion", wie du es genannt hast ist noch da - das klingt einleuchtend!

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    44
    Beiträge
    689
    @sternst : Ja, da haste recht, in Assembler brauche ich den Stack weniger da kann man mir den Registern schon unheimlich viel machen
    Signatur??? kann ich mir nicht leisten!!!

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    @ Manu

    Oder du machst es eben mit setjmp() am Anfang der mainLoop() und einen longjmp() in der ISR. Siehe auch http://en.wikipedia.org/wiki/Longjmp#Simple_example

    MfG Mark

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    24.11.2008
    Alter
    33
    Beiträge
    60
    Hab mir grade den wiki-artikel durchgelesen...
    das scheint ja genau das zu sein, was ich suche:
    "to provide 'non-local jumps', or control flow besides the usual subroutine call and return sequence."

    "A problem with the use of setjmp/longjmp is that cleanup" - könnte das vielleicht auch ein problem mit dem "stackmüll" geben?

    naja jedenfalls nochmal vielen dank an alle, die mir bisher geantwortet haben

    ich mach mir erstmal nen kaffe - will irgendwer einen?

  5. #15
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Manu_91
    "A problem with the use of setjmp/longjmp is that cleanup" - könnte das vielleicht auch ein problem mit dem "stackmüll" geben?
    Nein, mit dem Stack hast du bei setjmp/longjmp keine Probleme. Das "cleanup" bezieht sich auf "höhere Ebenen", z.B. Dateien, die offen bleiben, oder Speicher, der nicht mehr freigegeben wird.

    das scheint ja genau das zu sein, was ich Suche
    Trotzdem solltest du über eine Umstrukturierung deines Programms nachdenken. Der Wunsch, Funktions übergreifend herumzuspringen, ist fast immer das Resultat eines "vermurksten" Grundkonzepts. Es gibt nur sehr wenige wirklich sinnvolle Anwendungsfälle für setjmp/longjmp.
    MfG
    Stefan

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    24.05.2012
    Beiträge
    14
    Ich löse sowas meistens mit einem JobStack. Du legst in der ISR einen Pointer, der auf die Funktion zeigt, die ausgeführt werden soll, auf den JobStack. Den JobStack arbeitest du dann in der Main-Loop ab. Damit ist die Funktion aus dem Interrupt-Kontext gelöst und du hast kein Problem mit unaufgeräumten Stacks und anderen Laufzeit-Problemen, da alles mit C-Board mitteln gelöst wird.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen