Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Interruptroutine Capture Compare Kategorie: Programmierung C (von PeterS - 20.08.2009 21:46)
Als Antwort auf Re: Interruptroutine Capture Compare von Josef - 20.08.2009 18:19
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 32 Application Board, CC-Pro 128 Application Board, Pro-Bot128
> > > hallo
> > > das problem besteht darin, dass die interruptroutine keine abfrage (if, switch usw.)
> > > oder einen Unterprogrammaufruf vertr├Ągt.
> >
> > Hi, das mag Dir so erscheinen ist aber nicht so. If's etc. funktionieren In IRQ Routinen, sonst
> > w├╝rde die ganze DCF Library nicht funkionieren.
> >
> > > sobald ich in die unten angef├╝hrte interruptroutine ein if einbaue verabschiedet sich der prozessor.
> > >
> > > void Timer3_ISR(void)
> > > {
> > >    x[a]=Timer_T3GetPM();
> > >    Irq_GetCount(INT_TIM3CAPT);           // Interrupt zur├╝cksetzen
> > > }
> > >
> > > will man nun ein signal mit unterschiedlichen Pulsl├Ąngen messen, funktioniert das nur
> > > wenn man im hauptprogamm ein while (x[a]==0; einbaut und anschlie├čend die Messung
> > > wieder startet (Bemerkung: ist aber nicht sinn eines interrupts, wenn man wartet bis der interrupt
> > > abgearbeitet ist)
> >
> > Man sollte immer! im Interrupt nur das n├Âtigste erledigen, und den Rest im normalen Programm
> > verarbeiten. Dabei erlaubt der Interpreter seinen IRQ Routinen viel mehr, als eine wirkliche
> > CPU durchgehen liesse.
> >
> > Gruss Peter
> >
> > > oder man l├Ąsst den code durchrasseln und macht immer wieder eine abfrage -> dann ├╝bersieht man
> > > irgendwann einen puls, wenn der codedurchlauf zu lange wird.
> > > gibts hier eine l├Âsung?
> > >
> > > gru├č
> > > josef
>
> :-( -> schwache antwort

Nein, denn das ist eine Verhaltensregel, und keine Erkl├Ąrung von Fehlern. Eine laufende Interrupt-
routine blockiert das Multithreading und andere Interrupts. Deshalb ist es normalerweise unklug,
zuviel in einer IRQ Routine zu erledigen.

> ich glaube nicht, wenn man eine if x[a]>0 m++; Abfrage in die interruptroutine einbaut, das eine lange ist.
> beim 10msec interrupt -> DCF 77 programm werden auch unterprogrogramme in der interruptroutine
> ausgef├╝hrt und es funktioniert.
> warum genau beim timer 3 nicht?

Ich kann Dir versichern, das es keinen Unterschied in der Abarbeitung von 10msec IRQs oder Timer3
IRQs gibt. Ich mu├č es eigentlich wissen, denn ich habe es implementiert. Es gibt aber wie oft,
auch andere Faktoren. Wie lang sind eigentlich die Impulse, die Du messen willst? W├Ąre es m├Âglich,
das Deine Programmlogik durcheinanderkommt, wenn die Impulse k├╝rzer sind, als die Abarbeitung
der IRQ Routine? Da ich Dein Hauptprogramm nicht kenne, ist das nat├╝rlich nur eine von mehreren
m├Âglichen Hypothesen.

Gruss Peter

> gru├č josef


    Antwort schreiben


Antworten:

Re: Interruptroutine Capture Compare (von Josef - 21.08.2009 10:23)
    Re: Interruptroutine Capture Compare (von PeterS - 22.08.2009 12:04)
        Re: Interruptroutine Capture Compare (von Josef - 22.08.2009 19:41)