mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable mit AVR Studio JTAG überwachen


Autor: Daniel (Gast)
Datum:

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

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

  while(1==1){
    _delay_ms(100);
    PORTA = 0x00; // X1
    _delay_ms(100);
    PORTA = 0xFF; // X2
    a=a+1; // X3 (disable?!)

  }

  return 0;
}
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.

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht 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:
a=a+1; // X3 (disable?!)

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


Gruß Skriptkiddy

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yeaha, es läuft.
Danke Skript Kiddy.

Der Compiler wurde, wie du vermutet hattest mit dem Parameter für 
Optimierung gestartet. Allerdings hieß das -Os.

Gruß
Daniel

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huhu, ich bins nochmal.

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


int main(void){
  cli();

  MCUCR = 0b00000011;
  GICR  = 0b11000000;

  
  DDRA = 0xFF;
  PORTA = 0xFF;

  sei();
  //Endlosschleife
  while(1==1){
    if( a == 0)
    {
      _delay_ms(2000);
      PORTA = 0x00;
      _delay_ms(2000);
      PORTA = 0xFF;
    }
    else
    {
      _delay_ms(250);
      PORTA = 0x00;
      _delay_ms(250);
      PORTA = 0xFF;
    }

  }
  return 0;
}

ISR(INT0_vect){
  if(a==0)
  {
    a=1;
  }
  else
  {
    a=0;
  }
}

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

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.