Forum: Mikrocontroller und Digitale Elektronik AVR STUDIO 4 Debugger


von Michael H. (h_m)


Lesenswert?

Hallo,

ich würde gerne um den nachfolgenden Code nachvollziehen kann den 
Debugger im AVR Studio4 Verwenden.

wenn ich dann mit step into (F11) hinein springe dann komme ich nur bis
1
Warten1:
2
      dec   r16         ;r16 - 1  
3
      brne  Warten1
und dann springt der gelbe Pfeil immer nur zwischen dec und brne hin und 
her auch wenn ich 500mal F11 drücke.

aber er müsste doch, wenn r16 auf null decrementiert ist eine zeile 
weiter springen, kann mir vielleicht jemand sagen wie ich durch den 
ganzen Code mit dem Debugger komme ?
1
;Blink1.asm  LED mit Vorwiderstand an PB3
2
3
      .include "tn13def.inc"
4
5
rjmp Anfang
6
Anfang:
7
      sbi   ddrb,3      ;Datenrichtungsbit
8
Schleife:
9
      sbi   portb,3     ;PB3 = 1
10
      ldi   r16,255     ;r16 laden 
11
Warten1:
12
      dec   r16         ;r16 - 1  
13
      brne  Warten1 
14
      cbi   portb,3     ;PB3 = 0
15
      ldi   r16,255     ;r16 laden 
16
Warten2:
17
      dec   r16         ;r16 -1  
18
      brne  Warten2 
19
rjmp  Schleife

von Spess53 (Gast)


Lesenswert?

Hi

Einfach nach 'dec r16' das ZERO-Flag setzen oder Strg+ F10 drücken.

MfG Spess

von Spess53 (Gast)


Lesenswert?

Hi

Nachtrag:   oder Strg+ F10 drücken...

Davor aber den Cursor auf deb Befehl nach ' brne  Warten1' setzen.

MfG Spess

von Wolfgang (Gast)


Lesenswert?

Michael H. schrieb:
> und dann springt der gelbe Pfeil immer nur zwischen dec und brne hin und
> her auch wenn ich 500mal F11 drücke.

Bist du sicher, dass du dich nicht verzählt hast?
Was stehen dabei in r16 für Werte?
Eigentlich sollte es nach 255 Durchläufen weitergehen.

von Spess53 (Gast)


Lesenswert?

Hi

>Eigentlich sollte es nach 255 Durchläufen weitergehen.

Macht aber über 500 Tastendrücke.

MfG Spess

von S. Landolt (Gast)


Lesenswert?

Mit einem AVR Studio 4 (Version 4.11) funktioniert das einwandfrei (mit 
F11). Wobei ich natürlich etwas in dieser Art benutze
1
  ldi  r16,4 ; 255     ;r16 laden

von Nachdenklicher (Gast)


Lesenswert?

Mal blöde gefragt (als privater Windowsverweigerer ist mein letzter 
Kontakt mit AVR Studio lange her, und auf der Arbeit hab ich nur 
schwerere Geschütze) - aber zeigt der Debugger nicht den Inhalt der 
Register an? Verändert sich, wenn Du dec r16 ausführst, der Wert, der 
für r16 angezeigt wird? Wird, wenn das Register von 1 auf 0 springt, das 
Zero-Flag gesetzt? Wenn beides ja, und brne trotzdem wieder zurück 
springt, isses wohl ein Bug im Simulator. Letzeres halte ich für nicht 
ausgeschlossen, zumal die Folge dec (register) und brne (label) 
eigentlich ein typisches Konstrukt ist.

von Hugo H. (hugohurtig1)


Lesenswert?

1
.include "tn13def.inc"
2
3
rjmp Anfang
4
Anfang:
5
      sbi   ddrb,3      ;Datenrichtungsbit
6
Schleife:
7
      sbi   portb,3     ;PB3 = 1
8
      ldi   r16,255     ;r16 laden 
9
Warten1:
10
      dec   r16         ;r16 - 1  
11
      brne  Warten1 
12
      cbi   portb,3     ;PB3 = 0
13
      ldi   r16,255     ;r16 laden 
14
Warten2:
15
      dec   r16         ;r16 -1  
16
      brne  Warten2 
17
rjmp  Schleife
Alternativ kannst Du auch das Zero-Flag nach "brne  Warten1 " löschen.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

S. Landolt schrieb:
> Mit einem AVR Studio 4 (Version 4.11) funktioniert das einwandfrei (mit
> F11). Wobei ich natürlich etwas in dieser Art benutze
>
1
>   ldi  r16,4 ; 255     ;r16 laden
2
>

 Natürlich.
 Gerade beim debuggen.

von Hugo H. (hugohurtig1)


Lesenswert?

Marc V. schrieb:
> Natürlich.
>  Gerade beim debuggen.

Ich habe nachgesehen (in einer alten VM) - auch das AVR-Studio 4 hat 
Break-Points. Dann kann und sollte man diese auch nutzen - oder? Das hat 
sich beim Debuggen (aus meiner Sicht) bewährt :-)

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Nachdenklicher schrieb:

> Verändert sich, wenn Du dec r16 ausführst, der Wert, der
> für r16 angezeigt wird? Wird, wenn das Register von 1 auf 0 springt, das
> Zero-Flag gesetzt? Wenn beides ja, und brne trotzdem wieder zurück
> springt, isses wohl ein Bug im Simulator.

Nö, der Teil, der den AVR-Core simuliert, ist fehlerfrei, jedenfalls 
beim Simulator V2. Fehler gibt es (teils reichlich) in der Simulation 
der Periperie.

Und natürlich verläßt man die Schleife. Nach 512 mal Taste drücken.

Wenn nicht, dann liegt es mit einiger Wahrscheinlichkeit daran, dass man 
den Einsprung in ISRs per Debugger-Einstellung skippt, eine solche ISR 
aber die Flags kaputt macht. Denn geskipped wird nur die Darstellung im 
Debugger, nicht aber die Ausführung der ISR selber.

von Hugo H. (hugohurtig1)


Lesenswert?

c-hater schrieb:
> Wenn nicht, dann liegt es mit einiger Wahrscheinlichkeit daran, dass man
> den Einsprung in ISRs per Debugger-Einstellung skippt, eine solche ISR
> aber die Flags kaputt macht.

Wo siehst Du eine ISR?

von Spess53 (Gast)


Lesenswert?

Hi

>Hat das Studio 4 keine Break-Points?

Aber da must du auch erst mit dem Cursor hin und den Breakpint setze. Da 
kannst du auch gleich mit 'Run to Cursor' weiter machen.

Aber Michael H. (h_m) scheint das eh nicht mehr zu interessieren.


MfG Spess

von c-hater (Gast)


Lesenswert?

Hugo H. schrieb:

> Wo siehst Du eine ISR?

Nirgendwo. Allerdings ist es ja leider recht üblich, dass nicht der 
komplette Code gepostet wird. Deswegen habe ich schonmal vorbeugend die 
Lösung geliefert, falls es sich rausstellen sollte, dass wir es hier 
wieder mal mit so einem Traffic-Troll zu tun haben, der sich der 
Salami-Taktik bedient, um den Thread möglichst lang werden zu lassen.

von Hugo H. (hugohurtig1)


Lesenswert?

c-hater schrieb:
> Allerdings ist es ja leider recht üblich, dass nicht der
> komplette Code gepostet wird.

> Michael H. schrieb:
> kann mir vielleicht jemand sagen wie ich durch den
> ganzen Code mit dem Debugger komme ?
1
;Blink1.asm  LED mit Vorwiderstand an PB3
2
      .include "tn13def.inc"
3
rjmp Anfang
4
Anfang:
5
      sbi   ddrb,3      ;Datenrichtungsbit
6
Schleife:
7
      sbi   portb,3     ;PB3 = 1
8
      ldi   r16,255     ;r16 laden 
9
Warten1:
10
      dec   r16         ;r16 - 1  
11
      brne  Warten1 
12
      cbi   portb,3     ;PB3 = 0
13
      ldi   r16,255     ;r16 laden 
14
Warten2:
15
      dec   r16         ;r16 -1  
16
      brne  Warten2 
17
rjmp  Schleife

Hmmm ....

: Bearbeitet durch User
Beitrag #6662653 wurde von einem Moderator gelöscht.
von c-hater (Gast)


Lesenswert?

Hugo H. schrieb:

> Hmmm ....

Eben. Was sagt dir, dass der gepostete Code auch vollständig dem 
getesteten Code entspricht? Genau: nix.

von Thomas (kosmos)


Lesenswert?

entweder setzt du nach dem brne einen Breakpoint und lässt das Ding im 
Autostep oder Runmodus laufen, dann brauchst du nicht so oft klicken, 
denn er hält genau am Breakpoint an. Oder du änderst in der 
Registerübersicht den Wert von R16 z.B. auf 1 dann brauchst du nicht so 
oft klicken. evtl. erst die Registeransicht auf dezimal umstellen sonst 
stehen dort hex Werte.

Das Ding nennt sich übrigens Simulator, ein Debugger wäre der Atmel ICE 
damit kannst du das Programm im µC laufen lassen und im AVR-Studio 
prüfen ob alles so gemacht wird wie du es wünscht.

Wenn dein µC aber mit 1 oder 8 MHz (1 bzw. 8 Millionen Befehle pro 
Sekunde) läuft, dann läuft deine Schleife so schnell ab, dass du das an 
der LED nicht  siehst.

Normalerweise macht man das so, dass man am Breakpoint die Stoppuhr des 
Simulators auf 0 stellt und es automatisch bis zum nächsten Breakpoint 
laufen lässt, dann schaut man sich auf der Stoppuhr an wie lange das 
gedauert hat.

Habe gerade kein AVR-Studio hier, vielleicht kannst du einen Screenshot 
machen das Zeichne ich dir die Stellen ein.

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.