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