Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt - Programmablauf
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
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
Ok. Danke.
Und wie ist es wenn ich gerade in einer warteschleife bin?
z.B.:
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?
linux_80
05.08.2007, 01:31
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.
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.
linux_80
06.08.2007, 18:00
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.