PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Delay während Interrupt



manhunt
08.12.2008, 23:21
Hallo

Also ich verwenden den AVR GCC4 und Programmiere nur um ein Beispiel zu nennen den Atmega168....

Meine Frage ist folgende undzwar brauche ich in meinem Programm ein Delay das im ~1500us Bereich liegt. Nur was passiert wenn während dessen ein Interrupt kommt der zB 2000us braucht. Wird das delay während dessen weitergezählt oder ist es wie ich befürchte eine einfache Schleife die danach weiter arbeitet?

Denn 3500ms wären wohl der Tot der Hardware....(Aufzeit)

Liebe Grüße,
manhunt

PicNick
09.12.2008, 08:05
Bereite dich innerlich auf Verluste vor.
Es ist so, wie von dir befürchtet :mrgreen:

Delay-Schleifen sind bei Interrupts, die 2 mS (sic) brauchen, nicht zu brauchen.
Da musst du insgesamt anders strukturieren

vajk
09.12.2008, 16:30
hmm delay ist pfui :-)

und die Verwendung in einem Interrupt widerspricht es der Empfehlung, nur wenig in selbigen zu packen ...

Also wieso stellst Du den Timer nicht so ein, daß Du alle 1,5 ms einen Interrupt bekommst und zählst da eine volatile byte variable hoch .. .
setzt diese auf 0 und machst im Programmablauf weiter, wenn diese 1 ist ...
als eine der vielen Möglichkeiten .....

Besserwessi
09.12.2008, 19:12
Die einfachen delay-schleifen haben genau das Problem, wenn da ein Interrupt dazwischen kommt dauert es länger. Da hilt es einen Timer zu nehmen. Wobei man dazu nicht mal einen Interrupt nutzen muß, es reicht auf das Interrupt-flag zu warten, nachdem man den Timer programmiert hat. Die extra Variable und ISR braucht man erst wenn es um sehr lange Zeiten geht, oder um Zeiten die sich überschneiden.

vajk
09.12.2008, 19:35
besserwissi, stimmt, nur ich nutze n timerinterrupt immer mehrfach .... (das timerflag muß man dann auch wieder löschen, sonst gehts nur einmal)

oberallgeier
09.12.2008, 20:17
... wenn während dessen ein Interrupt kommt der zB 2000us braucht ...Also ich verstehe das jetzt so, dass Deine Interrupt-Service-Routine 2ms brauchen dürfte. Seltsam, seltsam. Warum bin ich IMMER besorgt darum, dass meine ISR so kurz wie möglich sind. Laufzeit immer deutlich unter dem Interruptabstand. Sonst macht das Ganze doch keinen (wenig) Sinn. Na ja, wenns blos EINE ISR ist, die nur wenige Male pro Sekunde kommt, dann ja - gibts denn so etwas?

Besserwessi
09.12.2008, 20:50
Es gibt schon so seltsame Fälle. Bei mir läuft ein Controller 24 H am Tag, der kreigt nur etwa 4 mal am Tag eine ISR und der Dauert dann etwa 1-2 Sekunden.

Der Controller hängt an der Klingel.