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


von Dayly (Gast)


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

von Teo D. (teoderix)


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
von Klaus (Gast)


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

von Dayly (Gast)


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

von Volker S. (vloki)


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...

von Klaus (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.