Beim einem AtMega kann eine Anweisung die mehrere Takte dauert sehr wohl von einem Interrupt unterbrochen werden.Alles andere wäre auch sinnlos...Zitat von ATmega32 Datenblatt, Seite 13
stell dir mal vor der AVR würde mitten in einem CALL (4 Zyklen) her gehen, und irgendwas anderes tun ... wo soll er dann nach der ISR hin springen?
Man könnte ein Programm so schreiben, aber empfehlen würde ich es nicht, da die ISRs sonst zu groß werden. Man stelle sich nur mal ein Programm mit 4 oder 5 Interrupts vor, bei denen die Routinen derart lang sind, daß sie sich ständig gegenseitig unterbrechen ... viel Spaß beim debuggen.Es gibt Programme die nur auf Ereignisse reagieren, die Interrupts auslösen. Man könnte fast sagen, die ereignisgesteuert sind. Die "Hauptschleife" bei diesen Programmen ist leer.
Meiner Meinung nach sollte man in den ISRs nur jeweils einzelne Flags setzen, und vielleicht noch einige Variablen ändern. Die eigentliche Arbeit, also komplexe Berechnungen etc. erledigt man dann sinnvollerweise woanders, nämlich in der Hauptschleife ("Flag XY gesetzt? gut, dann führe Funktion Z aus")
Lesezeichen