www.mikrocontroller.net

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


Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht 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:


// ------------------  interrupt routines for switches ----------- //

// button down interrupt (yellow)

ISR(INT0_vect)
{  
  cli();

  Entprellen1();
  set_Switch1_flag;
  if(Status_flag.cnt_mode <2)
    { Status_flag.cnt_mode = 4;}
    else
      {Status_flag.cnt_mode --;}

  sei();
}

// button up interrupt (blue)

ISR(INT1_vect)
{  
  cli();  

  Entprellen2();
  set_Switch2_flag;  
  if(Status_flag.cnt_mode >3)
    { Status_flag.cnt_mode =1;}
    else
      {Status_flag.cnt_mode ++;}

  sei();
}

// switch2 interrupt

ISR(INT3_vect)
{  
  set_RG_mode_sw_flag;  
}


// ---------------------------------------------------------- //


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

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dein Codeschnippsel produziert bei mir:
Build started 28.1.2011 at 22:44:34
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
../breakpoints.c:7: warning: return type defaults to 'int'
../breakpoints.c: In function 'ISR':
../breakpoints.c:7: warning: type of 'INT0_vect' defaults to 'int'
../breakpoints.c:8: warning: implicit declaration of function 'cli'
../breakpoints.c:10: warning: implicit declaration of function 'Entprellen1'
../breakpoints.c:11: error: 'set_Switch1_flag' undeclared (first use in this function)
../breakpoints.c:11: error: (Each undeclared identifier is reported only once
../breakpoints.c:11: error: for each function it appears in.)
../breakpoints.c:12: error: 'Status_flag' undeclared (first use in this function)
../breakpoints.c:17: warning: implicit declaration of function 'sei'
../breakpoints.c:18: warning: control reaches end of non-void function
../breakpoints.c: At top level:
../breakpoints.c:23: warning: return type defaults to 'int'
../breakpoints.c:22: error: redefinition of 'ISR'
../breakpoints.c:7: error: previous definition of 'ISR' was here
../breakpoints.c: In function 'ISR':
../breakpoints.c:23: warning: type of 'INT1_vect' defaults to 'int'
../breakpoints.c:26: warning: implicit declaration of function 'Entprellen2'
../breakpoints.c:27: error: 'set_Switch2_flag' undeclared (first use in this function)
../breakpoints.c:28: error: 'Status_flag' undeclared (first use in this function)
../breakpoints.c:34: warning: control reaches end of non-void function
../breakpoints.c: At top level:
../breakpoints.c:39: warning: return type defaults to 'int'
../breakpoints.c:38: error: redefinition of 'ISR'
../breakpoints.c:7: error: previous definition of 'ISR' was here
../breakpoints.c: In function 'ISR':
../breakpoints.c:39: warning: type of 'INT3_vect' defaults to 'int'
../breakpoints.c:40: error: 'set_RG_mode_sw_flag' undeclared (first use in this function)
../breakpoints.c:41: warning: control reaches end of non-void function
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:
#include <avr/io.h>
#include <avr/interrupt.h>

#define Entprellen1()
#define Entprellen2()

#define set_Switch1_flag
#define set_Switch2_flag
#define set_RG_mode_sw_flag

struct {
  uint8_t cnt_mode;
} Status_flag;

int main(void)
{
  while(1){}
}

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.