Forum: Gesperrte Threads Interrupt wird unregelmäßig


von Tine S. (tine)


Lesenswert?

Hallo,

Ich habe in einem dspic 30F folgende Interrupt Routine am Laufen:
1
void
2
_ISR _T1Interrupt( void)
3
{
4
  TMR1=0; //restart timer
5
  LATDbits.LATD0=!LATDbits.LATD0; //toggle LED
6
  m10++; //increase 10 ms tic counter
7
  a0=a1; //shift HIER IST DAS PROBLEM
8
    
9
  _T1IF=0; //!!!!clear interrupt flag!!!!
10
}//Timer 1 interrupt

Die Routine wird alle 10 ms oder 18432 Taktzyklen aufgerufen, viel Zeit 
also. Komischerweise wird sie unregelmäßig, sobald die mit "Hier ist das 
Problem" markierte Zeile drin steht. Kommentiert man sie aus: null 
problemo. Steht sie drin: LED flackert unregelmäßig. Das gleiche 
passiert wenn ich statt den beiden chars a0/a1 ein char array a[2] 
verwende, und das erste auf das nullte Element schiebe.
Weder auf PortD noch auf a wird im Moment zugegriffen, ich habe schon 
allen Code ringsrum entfernt. Aber sobald das da drin steht, spinnt der 
Interrupt.

: Verschoben durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> LED flackert unregelmäßig.
Welche LED wird denn da wie und wo angesteuert?

von Draco (Gast)


Lesenswert?

Du darfst den Timer erst am Ende "restarten", d.h. nachdem Du den "tic 
counter" erhöht hast, sonst landest Du ggf. mehrmals unmittelbar 
hintereinander in der Routine.

von Draco (Gast)


Lesenswert?

Ach, seh' grad' dass der Tick-Count nicht der Timer ist. War wohl noch 
zu früh.
Hm... dann müßte man mal vlt. mal schauen was mit a0 an anderer Stelle 
noch so passiert.

von Ferkel (Gast)


Lesenswert?

Laß Dir vom Compiler ein Assembler Listing erstellen und sieh Dir an, ob 
da etwas auffällig ist.
Spinnender Interrupt -> Stack Problem; Überlauf, nicht initialisiert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wichtige Regeln - erst lesen, dann posten!
•Aussagekräftigen Betreff wählen
•Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.