- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Unterbrechung eines Interrupts

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Hallo Maik,

    für Deine Frage bin ich nur halb kompetent - ich bin kein Bascom-Spezialist. Es geht aber um Interrupts - die habe ich einigermassen im Griff. Allerdings sind die obigen Einwände gravierend - zeitlich und codemässig (zu) lange Interruptroutinen sind unschön, oft schädlich für den Programmablauf oder für den Controller sogar ein Grund ins Koma zu fallen.

    ... Gibt es also eine Möglichkeit, einen Interrupt zu unterbrechen ...
    Ja, die Möglichkeit gibt es. Ich zitiere Dir mal das Datenblatt des mega328 als Beispiel. Dieser Abschnitt gilt für alle mir bekannten Atmelcontroller :
    ...
    6.7 Reset and Interrupt Handling
    ...
    When an interrupt occurs, the Global Interrupt Enable I-bit is cleared and all interrupts are disabled.
    The user software can write logic one to the I-bit to enable nested interrupts. All enabled
    interrupts can then interrupt the current interrupt routine. The I-bit is automatically set when a
    Return from Interrupt instruction – RETI – is executed...
    Das heißt: jede InterruptServiceRoutine verbietet nach ihrem Aufruf weitere Interrupts. Die werden im Normalfall mit Ende der ISR wieder erlaubt : es wird der Befehl RETI ausgeführt, der setzt das I-Bit (automatisch) . Die Interrupts kannst Du per eigenem Programmbefehl >>sofort, innerhalb der laufenden ISR<< erlauben, wenn Du innerhalb dieser ISR (nennen wir die mal ISR-X) den Interrupt wieder global erlaubst. In C heißt der Befehl sei(); - Set Enable Interrupt. Sinnvoll kann nun sein diese ISR-X jetzt so aufzubauen, dass sie mehrfach gestartet werden kann weil das u.U. eben passieren kann: ISR-X(a) startet-und-läuft, ISR-X(b) startet-und-läuft, ISR-X(c) startet-und-läuft ... und erst dann ist (nur beispielhaft) die ISR-X(a) wieder zu Ende. Auch hier wieder die Möglichkeit ein Koma des Controllers zu provozieren.

    Ansonsten wie von den Vorgängern beschrieben - viel Platz für Stack vorsehen. Ich habe Routinen mit nested Interrupts in einigen Controllern problemlos in Betrieb.
    Geändert von oberallgeier (01.11.2014 um 09:06 Uhr) Grund: RETI nachgetragen
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Interrupt während eines Interrupts
    Von tegtom im Forum Assembler-Programmierung
    Antworten: 10
    Letzter Beitrag: 21.11.2010, 09:19
  2. Rechteckiges Signal mit Hilfe eines Interrupts messen
    Von Johnkonj im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 03.12.2008, 17:09
  3. Geschwindigkeit eines Programms (Interrupts, Timer)
    Von Björn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 25.08.2008, 21:32
  4. Verständnisprobleme über die Funktionsweise eines Interrupts
    Von electrofux im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.10.2006, 16:14
  5. Funktion ohne Unterbrechung
    Von debbi1 im Forum C-Control II
    Antworten: 10
    Letzter Beitrag: 21.11.2004, 17:16

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress