- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Verständnisfrage zum Thema Interrupts (mega64)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86

    Verständnisfrage zum Thema Interrupts (mega64)

    Anzeige

    E-Bike
    Hallo zusammen,

    ich hätte mal eine Verständnis frage zu Interrupts.

    Ich habe in meinem Programm zwei Schleifen.
    Nun will ich, dass wenn ein Signal an einem bestimmten Pin ankommt, die eine Schleife durchlaufen wird und bei einem anderen Interrupt die andere Schleife.

    Nun ist das doch so, das sich ein Interrupt die Adresse merkt, wo er rausgesprungen ist und setzt dann dort weiter fort.

    Und genau das möchte ich nicht. Ich möchte, das der Controller dann die andere Schleife solange durchläuft, bis wieder der erste Interrupt die erste Schleife aktiviert usw....

    Ist sowas überhaupt möglich oder muss nach einem Interrupt zurückgesprungen werden??

    Danke und Grüße

    popi

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Idee: Eine Endlosschleife enthält zwei innere Schleifen. Eine Variable (für die Abbruchbedingung) muss für die eine Schleife 0 sein und für die andere ungleich 0. Wenn du die Variable in den Interrupts setzt bzw. rücksetzt, musst du maximal den Schleifendurchlauf der aktuellen Schleife abwarten. Außer du baust noch breaks ein, wenn dein Code in den Schleifen zu lang ist.

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    Hallo sast,

    klinkt gut, danke für Deinen Vorschalg.

    Was sind den brakes? Kann man festlegen, nach welcher Bedingung man eine Schleife verlässt?
    Also wenn Bedingung eintrifft, dann while-Schleife raus!

    Werde man den Syntaxt versuchen zu ermitteln und dieses dann einzusetzen.

    Danke nochmal und ggf. bis später ;o)

    popi

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Ja, du kannst Schleifen auch vorzeitig verlassen. Ist aber unter Vorbehalt zu benutzen, da breaks einerseits einen unschönen Code zur Folge haben und andererseits ja immer mit einem Vergleich in Zusammenhang stehen, und bei kurzen Codesequenzen bläht es die Abarbeitung eher auf, als dass es einen Zeitvorteil bringt. Die Verwendung muss man von Fall zu Fall abwägen.
    Ich will dich auf keinen Fall anstiften breaks zu verwenden.

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    okay, dann versuche ich mal eine anderen lösung zu finden, außer mit "break"...

    Danke

    Gruß

    popi

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    irgendwie werde ich den Eindruck nicht los, dass du nur mit Endlosschleifen arbeitest. Deshalb hier mal eine kurze Anleitung.

    Beispiel 1: //a wird in den Serviceroutienen gesetzt
    Code:
    int a;
    while(1)
    {
      while(a){//code}
      while(!a){//anderer code}
    }
    Beispiel 2: //wenn der code sehr lang ist in den Schleifen
    // nur mit Endlosschleifen
    Code:
    int a;
    while(1)
    {
      while(1)
      {
        //code
        if(!a)break;
        //code geht weiter
      }
      while(1)
      {
        //anderer code
        if(a)break;
        //code geht weiter
      }
    }
    Beispiel 3: //eine Mischung aus beiden
    Code:
    int a;
    while(1)
    {
      while(a)
      {
        //code
        if(!a)break;
        //code geht weiter
      }
      while(!a)
      {
        //anderer code
        if(a)break;
        //code geht weiter
      }
    }
    Im Normalfall würde ich hier Beispiel 1 nehmen

    sast

    雅思特史特芬
    开发及研究

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Es kommt darauf an, wie komfortabel du die Sache machen willst.
    Wenn es genügt, daß das Umschalten auf eine andere Schleife darin besteht, daß sie einfach oben beim "while(1)" angesprungen wird, brauchst du nur die Adresse am Stack zu fälschen.
    Wenn eine Schleife aber immer genau an dem Punkt mitten drin angesprungen werden soll, wo sie das letze mal untebrochen worden ist, wird das etwas aufwendiger.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    @PicNick
    Ich glaube soweit will popi nicht eintauchen, siehe "Schleifen parallel abarbeiten ???"

    sast

    雅思特史特芬
    开发及研究

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von sast
    Ich glaube soweit will popi nicht eintauchen, ..
    'is beruhigend
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    Super... vielen Dank...

    habe das sofort in meine kleine Anfängerformelsammlung aufgenommen!
    und werde es wohl doch so in meinen Code einarbeiten ;o) ist jetzt mal zu Testzwecken schneller, Codeoptimierung folgt dann in der Phase 2 ;o)

    Momentan komme ich sowieso nicht weiter... habe schon ein neues Problem gepostet.
    Ich kann mein Projekt nicht mehr Compilieren.
    Komischerweise meckert der Compiler nicht direkt, nur wenn man es Simulator abspielen möchte, sieht man, das es die erwänte Zeile nicht compiliert, warum auch immer...

    Wenn ich damit durch bin, werde ich mal die brakes ausprobieren.

    Gruß

    popi

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress