Forum: Compiler & IDEs keine Breakpoints in ISR möglich


von Robert P. (Firma: ---) (ausmilkel)


Lesenswert?

Hallo,

ich programmiere gerade einen AT90CAN128.

Ich versuche gerade über den debugmodus meinen Programmcode auf 
Funktionalität zu prüfen ;-)

Leider kann ich keinen breakpoint in der ISR - Routine setzen, bzw. 
werden die breakpoints nach dem compilieren gelöscht.
Die ISR sieht so aus:
1
// ------------------  interrupt routines for switches ----------- //
2
3
// button down interrupt (yellow)
4
5
ISR(INT0_vect)
6
{  
7
  cli();
8
9
  Entprellen1();
10
  set_Switch1_flag;
11
  if(Status_flag.cnt_mode <2)
12
    { Status_flag.cnt_mode = 4;}
13
    else
14
      {Status_flag.cnt_mode --;}
15
16
  sei();
17
}
18
19
// button up interrupt (blue)
20
21
ISR(INT1_vect)
22
{  
23
  cli();  
24
25
  Entprellen2();
26
  set_Switch2_flag;  
27
  if(Status_flag.cnt_mode >3)
28
    { Status_flag.cnt_mode =1;}
29
    else
30
      {Status_flag.cnt_mode ++;}
31
32
  sei();
33
}
34
35
// switch2 interrupt
36
37
ISR(INT3_vect)
38
{  
39
  set_RG_mode_sw_flag;  
40
}
41
42
43
// ---------------------------------------------------------- //

Ich habe die Optimierung auf 0O gesetzt.
Die Interruptroutinen werden ausgeführt ( Habe die Flags, welche in den 
Routinen gesetzt werden, in der "main" Datei auslesen lassen)

Ich benutze AVR Studio, Version: 4.18.716
Programmer ist ein AVR Dragon

Könnt ihr mir weiterhelfen? Wieso werden die breakpoints nicht 
akzeptiert?
Gibt es noch andere Einstellungen im AVR Studio, die ich beachten muss?

Viele Grüße,
Robert

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

Dein Codeschnippsel produziert bei mir:
1
Build started 28.1.2011 at 22:44:34
2
avr-gcc  -mmcu=at90can128 -Wall -gdwarf-2 -std=gnu99 -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT breakpoints.o -MF dep/breakpoints.o.d  -c  ../breakpoints.c
3
../breakpoints.c:7: warning: return type defaults to 'int'
4
../breakpoints.c: In function 'ISR':
5
../breakpoints.c:7: warning: type of 'INT0_vect' defaults to 'int'
6
../breakpoints.c:8: warning: implicit declaration of function 'cli'
7
../breakpoints.c:10: warning: implicit declaration of function 'Entprellen1'
8
../breakpoints.c:11: error: 'set_Switch1_flag' undeclared (first use in this function)
9
../breakpoints.c:11: error: (Each undeclared identifier is reported only once
10
../breakpoints.c:11: error: for each function it appears in.)
11
../breakpoints.c:12: error: 'Status_flag' undeclared (first use in this function)
12
../breakpoints.c:17: warning: implicit declaration of function 'sei'
13
../breakpoints.c:18: warning: control reaches end of non-void function
14
../breakpoints.c: At top level:
15
../breakpoints.c:23: warning: return type defaults to 'int'
16
../breakpoints.c:22: error: redefinition of 'ISR'
17
../breakpoints.c:7: error: previous definition of 'ISR' was here
18
../breakpoints.c: In function 'ISR':
19
../breakpoints.c:23: warning: type of 'INT1_vect' defaults to 'int'
20
../breakpoints.c:26: warning: implicit declaration of function 'Entprellen2'
21
../breakpoints.c:27: error: 'set_Switch2_flag' undeclared (first use in this function)
22
../breakpoints.c:28: error: 'Status_flag' undeclared (first use in this function)
23
../breakpoints.c:34: warning: control reaches end of non-void function
24
../breakpoints.c: At top level:
25
../breakpoints.c:39: warning: return type defaults to 'int'
26
../breakpoints.c:38: error: redefinition of 'ISR'
27
../breakpoints.c:7: error: previous definition of 'ISR' was here
28
../breakpoints.c: In function 'ISR':
29
../breakpoints.c:39: warning: type of 'INT3_vect' defaults to 'int'
30
../breakpoints.c:40: error: 'set_RG_mode_sw_flag' undeclared (first use in this function)
31
../breakpoints.c:41: warning: control reaches end of non-void function
32
make: *** [breakpoints.o] Error 1

Ich versuche durch Hinzufügen meines Codes eine compilierbare Version zu 
erzeugen. Diese Version wird höchstwahrscheinlich nicht mit deiner 
übereinstimmen.

Sie ist auch nicht tauglich für die Simulation der ISR bzw. einen 
Lauftest auf der Hardware, weil ich zu faul war auch noch die 
Initialisierung der drei externen Interrupts zu implementieren.

Mein hinzugefügter Rumpfcode:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
#define Entprellen1()
5
#define Entprellen2()
6
7
#define set_Switch1_flag
8
#define set_Switch2_flag
9
#define set_RG_mode_sw_flag
10
11
struct {
12
  uint8_t cnt_mode;
13
} Status_flag;
14
15
int main(void)
16
{
17
  while(1){}
18
}

Mit diesen Änderungen ist es problemlos möglich Breakpoints in den ISR 
zu setzen (s. Anhang).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.