AVR STUDIO 4 Debugger

OP #6661683
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
Gast #6661986
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.
#6662475
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.
Gast #6662559
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.
Gast #6662564
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
Gast #6662614
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.
#6662628
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 ....
Beitrag #6662653 wurde von einem Moderator gelöscht.
#6662794
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren