Wie macht man einen Einzelschritt im Simulator?

Gast #1151663
Lesenswert?

Hallo, wie macht man im Simulator denn einen "Einzelschritt", also ohne 
dem Code gleich in die Eingeweide zu schauen?

Beispiel (sinnlos, aber nur für's Prinzip)

  _delay_ms(10);
  _delay_ms(10);
  _delay_ms(10);

Der gelbe Pfeil steht auf der ersten der 3 Zeilen, und ich möchte nur 
wissen, wieviele prozessor clocks nach der ersten Zeile vergangen sind. 
Also wie komme ich mit einer Taste zur zweiten Zeite, ohne daß ich in 
die Implementierung von _delay_ms einsteige und ohne alles mit 
Breakpoints zupflastern zu müssen..? Wahrscheinlich bin ich nur zu 
blind... :-)

Optimierung hab ich ausgeschaltet..
Gast #1151703
Lesenswert?

Also das komplette "Programm"

#include <util/delay.h>

void main()
{
  _delay_ms(10);
  _delay_ms(10);
  _delay_ms(10);
}


Ich drücke Start -> gelber Pfeil steht auf dem Funktiosanfang "{"

Was muß ich nun drücken, damit der gelbe Pfeil nacheinander diese 3 
Zeilen hinunterwandert (und nur diese) ? Mit F10 finde ich mich in der 
delay.h wieder, was ich gerade nicht will...
#1151710
Lesenswert?

CAnfänger wrote:
> Also das komplette "Programm"
>
> #include <util/delay.h>
>
> void main()
> {
>   _delay_ms(10);
>   _delay_ms(10);
>   _delay_ms(10);
> }
>
>
> Ich drücke Start -> gelber Pfeil steht auf dem Funktiosanfang "{"
>
> Was muß ich nun drücken, damit der gelbe Pfeil nacheinander diese 3
> Zeilen hinunterwandert (und nur diese) ? Mit F10 finde ich mich in der
> delay.h wieder, was ich gerade nicht will...


1) stimmen die Zeiten sowieso nicht
2) macht ein delay in einer Debug-Sitzung nicht wirklich Sinn. Der 
Programmierer hat einen viel größeren delay.
3) Die delay Funktion sind generell oftmals ein Zeichen für den falschen 
Programmieransatz.
4) Der Compiler wird die delay Funktionen inlinen.
5) In die Zeile nach dem delay einen Breakpoint setzen und das Programm 
dorthin laufen lassen.
6) Hab jetzt gerade kein AVR-Studio bei der Hand. Wenn ich mich recht 
erinnere, gibt es auch einen Menüpunkt 'Run to this line' oder so 
ähnlich. Wie gesagt: Einfach mal das Angebot im Debug-Menü studieren.
Gast #1151726
Lesenswert?

Bevor Ihr hier über den nicht vorhandenen Sinn diskutiert (den ich oben 
erklärt habe) -

Könnte das bitte jemand mal kurz selbst wirklich ausprobieren? Ich habe 
die Anleitung gelesen. Ich will weder ein- noch aus-"steppen", sondern 
in der gleichen Ebene bleiben... F10 tut das bei mir nicht.

Sorry aber bis jetzt gab es das in jedem Debugger, den ich benutzt 
habe.. :-) Ich stell mich doof an..
Gast #1151787
Lesenswert?

Also schön, ein bischen mehr Quelltext, damit es "sinnvoller" erscheint. 
:-) Was mir aufgefallen ist: Ich kann auf die Zeile PORTB=0x11; keinen 
Breakpoint setzen - sobald ich das ganze laufen lasse, erhalte ich:

Debugger: 'Break at line my1Project.c:100' has been disabled. Unable to 
bind line 100 in file "my1Project.c" to a program memory address.

Auffällig: der Debugger verwendet eine .elf-Datei, die gar nicht zu 
meinem Projekt gehört.. Compiliert wird aber die richtige Datei.. Wo 
stellt man denn das nun wieder ein, welche .elf-datei er nimmt?



#include <util/delay.h>
#include <avr/io.h>

int main()
{
  _delay_ms(10);
  PORTB=0x11;
  _delay_ms(10);
  PORTB=0x22;
  _delay_ms(10);
  PORTB=0x11;
}
Persönliche Seite #1151795
Lesenswert?

CAnfänger wrote:

> Auffällig: der Debugger verwendet eine .elf-Datei, die gar nicht zu
> meinem Projekt gehört.. Compiliert wird aber die richtige Datei.. Wo
> stellt man denn das nun wieder ein, welche .elf-datei er nimmt?

Was soll er sonst nehmen? Irgendeine der Ausgabedateien muss es schon 
sein. Da bleiben (beim modernen Debugger in AVR-Studio (meinst du den 
mit "Debugger" oder meinst du einen anderen Debugger, gdb?, vmlab?)) 
exakt die ELF-Datei oder die HEX-Datei, die aus der ELF-Datei erzeugt 
wurde. Und vergleiche mal den Namen der ELF Datei mit deinem 
Projektnamen oder mit dem Target in dem Makefile.
Gast #1151806
Lesenswert?

Ich meine den Debugger vom AVR Studio (nicht den Debugger2). Ich glaube 
dieses neue "AVR Studio" hat irgendwie ne Macke.. Oder wieso gibt es bei 
mir angeblich dasselbe Windows-Fenster mit Nummer 1 aber 2 verschiedenen 
Dateien, wobei ich auch nicht umschalten kann? (siehe Bild)...
Angehängte Dateien:
Gast #1151827
Lesenswert?

So, neu gestartet, jetzt hab ich zumindest dasselbe Fenster Nummer 1 
zweimal.. Ich kann jetzt auch einen Breakpoint auf diese Zeile setzen:

  PORTB=0x11;

aber egal wie ich weitergehe, F10 oder F11, ich steige immer in die 
delay.h ein...
Gast #1151847
Lesenswert?

Naja, ich wollte es eben gerne ohne solche Krücken schaffen..

@Karl heinz: Punkt 4) wieso soll der Compiler das "inlinen" wenn ich die 
Optimierung aus habe?



Wäre wirklich nett, wenn es jemand mit einem AVR Studio testen könnte, 
ich zweifel schon arg an mir inzwischen...
Persönliche Seite #1151857
Lesenswert?

CAnfänger wrote:
> Naja, ich wollte es eben gerne ohne solche Krücken schaffen..

Beim schaffen wäre mir das egal ;-)

> @Karl heinz: Punkt 4) wieso soll der Compiler das "inlinen" wenn ich die
> Optimierung aus habe?

Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?

> Wäre wirklich nett, wenn es jemand mit einem AVR Studio testen könnte,
> ich zweifel schon arg an mir inzwischen...

Bei mir ginge das erst heute abend, mit einer älteren (4.12 oder 4.13) 
Version des AVR-Studios
Gast #1152054
Lesenswert?

Ich habe etwas weiterprobiert.. der ganze Rest meines Quelltextes (das 
oben ist ja nur ein Beispiel) läßt sich wie gewünscht mit F10 und F11 
debuggen, und da funktioniert es auch wie erwartet und ohne daß man 
extra bewakpoints bräuchte. Da hab ich wohl bei meinem Glück die einzige 
Ausnahme erwischt.. :-)
Persönliche Seite #1152247
Lesenswert?

Lothar Miller wrote:

>> Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?
> Das lassen wir uns mal gaaanz langsam auf der Zunge zergehen ;-)

Habe ich dekoriert falsch geschrieben? Ich gehe von dieser Bedeutung 
aus:

Thesaurus-Treffer: Synonyme "auszeichnen, dekorieren, eine Auszeichnung 
verleihen"

Also ein allgemeines Kenntlichmachen (mit einem Schlüsselwort aka 
keyword), ohne die Fälle Definition und Deklaration zu unterscheiden.
Moderator (Firma: Titel) Persönliche Seite #1152995
Lesenswert?

>>> Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?
>> Das lassen wir uns mal gaaanz langsam auf der Zunge zergehen ;-)
> Habe ich dekoriert falsch geschrieben?
> ...Synonyme "auszeichnen...
Hmmm, so gesehen hast du recht.
Dekorieren assoziiere ich allerdings mit Sahnehäubchen, festlichen 
Tafeln und Orden, also eher mit schönen, festlichem Beiwerk.
Ich hätte (im Kontext) eher deklariert bzw. definiert erwartet  :-)

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