www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Studio Debug "The symbol could not be found"


Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Kann mir jemand helfen. Ich wollte das On-Chip-Debugging mit dem JTAG 
ICE mkII testen. Leider scheitert das schon bei folgendem 
Minimalprogramm
int main() {
   uint8_t i = 0;

   while (1) {
      i++;
   }
}

Ich wollte einen Data-Breakpoint auf 'i' setzen bzw. 'i' als 
Watch-Variable verwenden. Bei ersterem bekomme ich im Fenster 'Add data 
breakpoint' die Meldung 'The symbol 'i' could not be found'. Wenn ich 
das mit der Watch-Variable versuche bekomme ich die Meldung 'Location 
not valid'.

Mache ich einen systematischen Fehler oder warum funktioniert rein 
garnichts?

Danke für die Hilfe,
Franz.

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Franz,

> 'The symbol 'i' could not be found'
hört sich danach an, dass der Präprozessor mir Dir schimpft.

Alle Includes da? Die, z.B.:
#include <avr/io.h>
#include <stdint.h>

Gruß
Nils

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm...

Wenn ich das so anschaue: das Porgramm macht ja auch nichts. Kein 
Schwein interessiert es, wie gross "i" gerade ist. Soll heissen:
Vielleicht hast du alles wegoptimiert?!
Wäre jedenfalls meine erste Vermutung.
Entweder Optimierung aus oder
 PORTA = i++;
statt
 i++;
Dann natürlich mit #include <avr/io.h>

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hört sich danach an, dass der Präprozessor mir Dir schimpft.

Nö, es ist der Debugger.
Vermutlich optimiert der Compiler alles, was mit i zu tun hat einfach 
weg, weil, wie Jochen schon schrieb, nichts ausser Hochzählen damit 
gemacht wird.

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich - ich hab die Rechnung ohne den Compiler gemacht.
'i' wird tatsächlich wegoptimiert. Das lässt sich z.B. durch ein 'PORTx 
= i;' in der Schleife vermeiden.
Jetzt kann ich 'i' auch bequem als Watch-Variable markieren und dessen 
aktuellen Wert beobachten.

Danke für die Tips,
Gruß Franz.

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein kleines Problem gibt es noch bei folgendem Szenario:
void bla() {
  uint8_t x = 0;

  PORTA = x;
  x++;
  PORTA = x;
  x++;
  PORTA = x;
}


int main() {
  DDRA |= 0xFF;

  bla();
}

Wenn ich jetzt hier versuche in der Funktion 'bla()' den Inhalt von 'x' 
als Watch-Variable zu kontrollieren, dann bekomme ich die Meldung 
'Location not valid'. Warum funktioniert das nicht?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Franz wrote:
> Warum funktioniert das nicht?

Weil der Compiler die "PORTx = x++" Aufrufe durch Konstanten ersetzt. 
Die Variable x gibt es also im "richtigen" Code nicht mehr.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deklarier die Variablen als "volatile".
Damit umgehst du Optimierungen- Die Variable liegt dann im SRAM.
Mfg

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.