-         

Ergebnis 1 bis 6 von 6

Thema: Interrupt - Programmablauf

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.02.2005
    Ort
    Hannover
    Beiträge
    174

    Interrupt - Programmablauf

    Anzeige

    Hi,
    mich interessiert es wo der Controller nach einer ISR das Programm fortsetzt.
    Wird nach dem letzten bearbeiteten Befehl weitergearbeitet oder startet das Programm neu?

    MfG Jörn

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373
    Hi,
    das Programm Speichert sich die Programmstelle vor dem Sprung in die ISR auf dem Stack und springt nach der ISR wieder dort hin zurück.
    Hoffe ich konnt dir helfen.
    mfg franz

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.02.2005
    Ort
    Hannover
    Beiträge
    174
    Ok. Danke.
    Und wie ist es wenn ich gerade in einer warteschleife bin?
    z.B.:
    Code:
    void sleep(uint16_t sleep_ms) 
    {
    	uint16_t i=0;
    	while(i<sleep_ms)
    	{
    		_delay_ms(1);
    		i++;
    	}
    }
    Angenommen der µC soll 3 sek warten und er muss in die ISR.
    Bleiben dann die Variableninhalte bestehen und er setzt die Warteschleife fort wenn er aus der ISR raus geht?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Wenn Du in C programmierst, werden vom Compiler alle in der ISR verwendeten Register auf dem Stack gesichert, und danach wiederhergestellt, so dass das Hauptprogramm nix von der Unterbrechung mitbekommt.

    Die Werte von Variablen stehen sowieso im SRAM, und bleiben so, ausser in der ISR wird die gleiche Variable verwendet, und verändert.
    Dazu gibts im Wiki auch einen Artikel.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.05.2007
    Alter
    26
    Beiträge
    183
    Wenn du meinst, dass er mitten in diesen 3sek die ISR abrackert und so die drei Sekunden verlängert, dann denke ich hast du recht. In diesem Fall würde ich entweder einen externen Timer verwenden oder die internen, somit hast du immer genau 3sek, egal, welche ISR die Wartezeit unterbricht. Im Allgemeinen dauert eine ISR aber nicht ewig und fällt auf die 3sek gesehen nicht wirklich ins Gewicht.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Das Problem mit der Zeit ergibt sich ja daraus, weil das Hauptprogramm nix von der ISR mitbekommt.
    Beim warten kommt es nur darauf an, was man verzögern will, und ob man einen Timer frei hat, falls es genau sein muss.

Berechtigungen

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