Variable mit AVR Studio JTAG überwachen

Gast #1994446
Lesenswert?
• ▲
▼
Nabend,

ich hab grad auf einem Testboard ein Atmega16 über JTAG ans laufen 
bekommen. Allerdings habe ich das Problem, dass AVR Studio mir die 
Variablen (z.B. int) nicht in der Überwachnung anzeigt und dort einfach 
den Breakpoint deaktiviert.

Ich benutze einen JTAG Debugger von:
http://www.keeelectronics.com/catalog/product_info.php?cPath=27&products_id=41

Der Programmer funktioniert und ich kann auch das Program laden und das 
Debuggen starten.
1
int main(void){
2
  int a = 0;
3
  //Endlosschleife
4
  DDRA = 0xFF;
5
  PORTA = 0x00;
6

7
  while(1==1){
8
    _delay_ms(100);
9
    PORTA = 0x00; // X1
10
    _delay_ms(100);
11
    PORTA = 0xFF; // X2
12
    a=a+1; // X3 (disable?!)
13

14
  }
15

16
  return 0;
17
}
X = Breakpoints
Wenn ich jetzt das Debuggen starte, kommt er bei der main an. (Gelber 
Pfeil steht drauf, X3 deaktiviert) Wenn ich nun auf "run" drücke, läuft 
er bis X2. Er überspringt X1. Wenn ich nun das Program weiter ausführe, 
springt er nach X1, und danach immer wieder nach X1 beim weiteren 
ausführen. Überspringt beim 2 bis n-ten durchlauf also X2.

Bei der Variable a in der Überwachnung, sagt er mir Unkown Location oder 
so ähnlich.

Jemand ne Idee wo das Problem ist?

Hab am Controller nur Reset auf 5V, Masse, VCC und das JTAG 
angeschlossen. Der Controller läuft auf 1Mhz und die PINs an PortA 
wechseln wie gewollt.
#1994515
Lesenswert?
• ▲
▼
Hast du die Compiler-Optimierung ausgeschaltet (-O0)?
Nur so ist sichergestellt, dass auch alle Quelltextzeilen wirklich im 
compilierten Programm berücksichtigt sind.

Das könnte z.B. wegoptimiert worden sein:
1
a=a+1; // X3 (disable?!)

Am besten mal ins Listing schauen, was der Compiler draus gemacht hat.


Gruß Skriptkiddy
Gast #1995980
Lesenswert?
• ▲
▼
Huhu, ich bins nochmal.

Ich hab jetzt nochmal ein wenig mit dem Code und der Optimierung 
rumgespielt.
So sieht er jetzt aus:
1
int a = 0;
2

3

4
int main(void){
5
  cli();
6

7
  MCUCR = 0b00000011;
8
  GICR  = 0b11000000;
9

10
  
11
  DDRA = 0xFF;
12
  PORTA = 0xFF;
13

14
  sei();
15
  //Endlosschleife
16
  while(1==1){
17
    if( a == 0)
18
    {
19
      _delay_ms(2000);
20
      PORTA = 0x00;
21
      _delay_ms(2000);
22
      PORTA = 0xFF;
23
    }
24
    else
25
    {
26
      _delay_ms(250);
27
      PORTA = 0x00;
28
      _delay_ms(250);
29
      PORTA = 0xFF;
30
    }
31

32
  }
33
  return 0;
34
}
35

36
ISR(INT0_vect){
37
  if(a==0)
38
  {
39
    a=1;
40
  }
41
  else
42
  {
43
    a=0;
44
  }
45
}

Es soll einfach nur eine LED unterschiedlich schnell in 2 "Modi" 
blinken. Ungerade Anzahl Interrupts = langsam blinken, gerade Anzahl = 
schnell blinken.

Jetzt hab ich folgendes Problem bei der Optimierung: Ohne Optimierung 
ist der Code 40xx Byte groß, mit Optimierung O1 nur knapp 300 Byte. 
Allerdings funktioniert bei der Optimierung O1 der else zweig im 
Hauptprogramm nicht, obwohl er in der InterruptServiceRoutine ankommt 
und a richtig setzt. Oder ich merke nicht das er im else-Zweig ankommt 
weil er was wegoptimiert hat. Dann gibts evtl. nen Problem mit der 
delay.h, weil sich das blinken nicht ändert.

Ohne Optimierung läuft er wie vorhergesehen.

Jemand ne Idee?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.