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..
F10 Einzelschritt, ohne in eine Funktion einzusteigen F11 Einzelschritt, wobei bei einem Funktionsaufruf in die Funktion hineingesteppt wird.
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...
PillePalle wrote: > Step over , Step out usw.usw. > > RTFM ... ... oder zumindest die Namen der Menüeinträge im Debug-Menü :-)
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.
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..
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; }
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.
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)...
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...
Wenn die BPs auf den PORTx Zeilen wieder funktionieren, gibt es eine pragmatische Lösung: Setze BPs auf die PORTx Zeilen und lasse das Programm dann frei laufen (F5)
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...
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
Super, es eilt ja nicht, aber ein Test wäre nett. Vielleicht geht es ja auch einfach nicht.
> Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?
Das lassen wir uns mal gaaanz langsam auf der Zunge zergehen ;-)
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.. :-)
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.
>>> 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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.