mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Richtig debuggen mit dem PicKit 3


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Dayly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend liebes Forum,

Ich arbeite zur Zeit mit einem PIC24E und als Programmierer der PICkit 
3.
Mein Problem ist, dass ich mit dem Programmierer/Debugger einfach nicht 
debuggen kann. Ich kann zwar wohl über MPLAB Zeile für Zeile durch 
gehen, aber ich kann in MPLAB weder Register noch kann ich meine 
Variablen auslesen..
Auch bleibt das Programm beim Debuggen bei einfachen while Schleifen 
hängen wo lediglich Flags überprüft werden, hängen. Heißt ich muss das 
Debug "Halten und reseten."  (Zbsp : while(SPIxSTATbits.SPIRBF==0); )
Wenn ich beim debuggen mit der Maus über eine Variable / Register gehe 
steht da immer dass keine Info verfügbar ist. Bei den SPI Buffer zeigt 
es immer nur 0x0000 an, obwohl die SPI funktioniert.

Zum Debuggen klicke ich in MPLAB auf "Debug Main Project".

MPLAB X IDE 4.15.

Normal ist das nicht, was kann ich tun? Im Pickit3 Datenblatt habe ich 
auch nichts konkretes dazu finden können..

Vielen Dank,
Wünsche einen schönen Feiertag,
Dayly

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Breakpoints vor dem compilieren gesetzt?!
Register/Variablen in den Fenstern, Variables und Watches anzeigen und 
ändern.
Das Anzeigen von Variablen etc. im Editor-Fenster, funktioniert nicht 
mit HW Tools wie PicKit, sondern nur im Simulator.

Dayly schrieb:
> Zbsp : while(SPIxSTATbits.SPIRBF==0

Wartet auf externes Ereignis. Kann über Stimulus simuliert werden. Zu 
finden  in "Simulator".

: Bearbeitet durch User
Autor: Klaus (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Dayly schrieb:
> Auch bleibt das Programm beim Debuggen bei einfachen while Schleifen
> hängen

Da setze ich gerne ein Nop() in die Schleife rein, auf das man dann 
einen Breakpoint setzen kann. Oder ich gehe mit "Goto Cursor" hinter die 
Schleife.

Teo D. schrieb:
> Breakpoints vor dem compilieren gesetzt?!

Ist egal, sind Hardware Breakponts. Kann man immer setzten und löschen, 
wenn die CPU angehalten ist.

Teo D. schrieb:
> Das Anzeigen von Variablen etc. im Editor-Fenster, funktioniert nicht
> mit HW Tools wie PicKit, sondern nur im Simulator.

Doch, solange die Variable im Scope des Debuggers ist. Wenn die CPU 
angehalten ist, den Cursor z.B. über eine lokale Variable und etwas 
warten. Dann liest der Debugger die Variable aus und zeigt sie als 
Tooltip an.

MfG Klaus

Autor: Dayly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Register/Variablen in den Fenstern, Variables und Watches anzeigen und
> ändern.

Da wird aber nichts angezeigt. Und wenn mal eine Variable in dem Fenster 
unten angezeigt wird, dann ohne Inhalt..

Klaus schrieb:
> Da setze ich gerne ein Nop() in die Schleife rein, auf das man dann
> einen Breakpoint setzen kann. Oder ich gehe mit "Goto Cursor" hinter die
> Schleife.

Muss ich mal ausprobieren, Vielen dank für den Tipp!


> Doch, solange die Variable im Scope des Debuggers ist. Wenn die CPU
> angehalten ist, den Cursor z.B. über eine lokale Variable und etwas
> warten. Dann liest der Debugger die Variable aus und zeigt sie als
> Tooltip an.
>
> MfG Klaus

Genau! Nach ein bisschen warten erscheint dann auch ein kleines 
Fensterchen über der Maus mit der Variable drin, nur steht halt dann 
dass keine Information dazu verfügbar ist.

Darum frage ich hier, ob eventuell noch was anderes eingestellt werden 
muss, wovon ich noch nichts weiß? Denn im Moment nützt mir das Debuggen 
so überhaupt nichts :/

mFG

Autor: Volker S. (vloki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache Sachen kann man nicht im Single Step Mode debuggen.
Das betrifft meistens Hardwaremodule. Im Single Step wird z.B. das Flag 
while(SPIxSTATbits.SPIRBF==0) vermutlich nie 1.

Da muss man dann den Breakpoint auf die Zeile danach setzen...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dayly schrieb:
> Genau! Nach ein bisschen warten erscheint dann auch ein kleines
> Fensterchen über der Maus mit der Variable drin, nur steht halt dann
> dass keine Information dazu verfügbar ist.

Schon mal überprüft, was für eine Variable das ist? Lokal, Global, SFR? 
Ist sie gerade im Scope der CPU oder wird sie noch erzeugt oder ist 
schon vernichtet? Wenn ich manchen Code so sehe, werden in jedem Block 
neue lokale Variable erzeugt, die sind nach der nächsten geschweiften 
Klammer wieder weg.

Ich benutze das ständig, weil ich häufig zu faul bin, extra einen Watch 
einzurichten. Große Strukturen und lange Strings  sind ein bischen doof 
zu lesen. Wenn man das besser haben will, braucht man doch einen Watch. 
Da sieht man auch komplexe Variable bis in jede Verästelung.

MfG Klaus

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.