Forum: Mikrocontroller und Digitale Elektronik AVR5 debugger stürzt ab, wenn F_CPU definiert


von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

Hallo,

ich kenne mich mit dem DEbugger noch nicht aus. Arbeite seit gestern das 
erste Mal damit.

Könnt ihr mir sagen, warum dieser abbricht, wenn ich F_CPU definiere, so 
wie im Bild zu sehen?

Wenn ich F_CPU weglasse, dann arbeitet der DEbugger weiter.

Ich würde mich über Hilfe sehr freuen.

Viele Grüße und noch einen schönen Donnerstag Morgen wünscht Matthias.

von Marius W. (mw1987)


Lesenswert?

Im Debugger sind die Delay-Funktionen nur extrem schwierig zu handhaben. 
Du solltest mit Breakpoints an bestimmten Stellen im Code arbeiten. Dann 
klappt das auch mit den delay-Funktionen einigermaßen.

MfG
Marius

von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

Marius Wensing schrieb:
> Im Debugger sind die Delay-Funktionen nur extrem schwierig zu handhaben.
> Du solltest mit Breakpoints an bestimmten Stellen im Code arbeiten. Dann
> klappt das auch mit den delay-Funktionen einigermaßen.
>
> MfG
> Marius

Hallo Marius,

Danke für Deine schnelle Antwort.

Ich habe es nur noch nie hinbekommen, das er an einem Brakpoint auch 
anhält.
Mache ich da etwas falsch?
Ich gehe aufs Menue Debug und wähle Start dEbugging and brake.
Dann kann ich aber nur einzelschritte über Step into (F11) machen, damit 
er zur nächsten Zeile springt. Damit hat er noch nicht beim Breakpoint 
gestoppt.

Gehe ich auf Continue (F5), dann rennt er trotz breakpoint durch.

Das Einführungsvideo und die Hilfe gibt darüber auch keinen Aufschluss.

Ich hoffe, Du kannst mir auch da weiter helfen.
Viele Grüße,

Matthias.

von Marius W. (mw1987)


Lesenswert?

Bist du dir sicher, dass der Controller den Breakpoint überspringt? 
Vielleicht hast du ja auch eine Endlosschleife in der lcd_ini oder der 
Keypad-Einleseroutine. In einem solchen Fall hilft es zum Beispiel den 
Debugger anzuhalten und zu schauen, wo sich der Programm-Zähler 
befindet. Mit dem Disassembly deines Programms (lss- und map-Datei) 
kannst du dann sehen, wo es hakt.

Bedenke außerdem, dass die delay-Routinen ohne Optimierung nicht richtig 
arbeiten. Das Debugging ist aber bei eingeschalteter Optimierung nicht 
unbedingt spaßig, also testweise ausschalten.

MfG
Marius

von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

Marius Wensing schrieb:
> Bist du dir sicher, dass der Controller den Breakpoint überspringt?
> Vielleicht hast du ja auch eine Endlosschleife in der lcd_ini oder der
> Keypad-Einleseroutine. In einem solchen Fall hilft es zum Beispiel den
> Debugger anzuhalten und zu schauen, wo sich der Programm-Zähler
> befindet. Mit dem Disassembly deines Programms (lss- und map-Datei)
> kannst du dann sehen, wo es hakt.
>
> Bedenke außerdem, dass die delay-Routinen ohne Optimierung nicht richtig
> arbeiten. Das Debugging ist aber bei eingeschalteter Optimierung nicht
> unbedingt spaßig, also testweise ausschalten.
>
> MfG
> Marius

Hallo Marius,

nochmals vielen DAnk für Deine Hilfe.

Ich hätte gedacht den DEbugger zu benutzen ist viel einfacher.
Breakpoint festlegen, start debugging and break anklicken und der 
debugger hält an dem breakpoint einfach an.

Ab da kann ich dann meine Variablen und Ports überprüfen, aber nein, da 
hängt ja noch viel mehr dran.

Endlosschleifen, ja die habe ich im Programm drin, denn es wird immer 
wieder wiederholt und dreht sihc im kreis

> Bist du dir sicher, dass der Controller den Breakpoint überspringt?

das bin ich mir, daran werde ich aber denken, wenn ich den brakpoint 
setze, das ich den auch erreiche.

im Moment schmeisst mich der debugger bei einer delayroutine raus.
siehe Fehlermeldung Bild.


wo sich der Programm-Zähler
> befindet. Mit dem Disassembly deines Programms (lss- und map-Datei)
> kannst du dann sehen, wo es hakt.

wo kann man das sehen wo sichder Zähler befindet?
was ist denn bitte disassembly?

Viele Fragen,

wenn Du magst, können wir das auch persönlich per Telefon und Teamviewer 
besprechen. Ich zahle auch gern für die Bemühungen.
mathes.hamann@googlemail.com

Viele Grüße,

Matthias.

von Marius W. (mw1987)


Lesenswert?

Also laut deinem Debugger befindest du dich irgendwo in einer 
Floating-Point Rechnung, die vermutlich aus den Delay-Funktionen 
aufgerufen wird. _mulsf ist eine Floating-Point Multiplikation. Kannst 
du mal deinen Source-Code posten?

Die Floating-Point-Rechnung sollte herausfliegen, wenn du in den 
Projekt-Einstellungen die Compiler-Optimierung aktivierst. Ist zwar 
nicht unbedingt so toll zu debuggen, sollte aber zeigen, ob du dann 
weiter kommst bis zum Breakpoint.

MfG
Marius

von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

Marius Wensing schrieb:
> Also laut deinem Debugger befindest du dich irgendwo in einer
> Floating-Point Rechnung, die vermutlich aus den Delay-Funktionen
> aufgerufen wird. _mulsf ist eine Floating-Point Multiplikation. Kannst
> du mal deinen Source-Code posten?
>
> Die Floating-Point-Rechnung sollte herausfliegen, wenn du in den
> Projekt-Einstellungen die Compiler-Optimierung aktivierst. Ist zwar
> nicht unbedingt so toll zu debuggen, sollte aber zeigen, ob du dann
> weiter kommst bis zum Breakpoint.
>
> MfG
> Marius

Hallo Marius,

ist alles ganz schön schwierig und sehr schwer sich das selber 
herzuleiten. Gibt es für sowas eigentlich eine richtige Anleitung?

anbei mein Sourcecode.
Ist arbeite gerade daran meine Tastaturroutine zu optimieren.

> Projekt-Einstellungen die Compiler-Optimierung aktivierst.

wo man das aktiviert weiß ich auch nicht. vielleicht liegt es ja schon 
daran.

Viele Grü´ße,

Matthias.

von Marius W. (mw1987)


Lesenswert?

Die Optimierungen findest du im AVR Studio 5 unter Project - ... 
Properties - Optimization. Da musst du von "None" auf "Optimize for 
Size" umstellen. Dann funktionieren auch die delay-Routinen einwandfrei.

Du solltest deinen Programmcode erstmal überarbeiten. Da sind diverse 
Fehler drin:
- Zum einen inkludiert man keine C-Dateien... Schreib dir für jedes 
Modul eine entsprechende Header-Datei. Den Rest übernimmt der Linker.

- Außerdem hast du in deinen Taster-Routinen ein "goto" drin, was 
absolut verpönt ist.

Wenn ich heute Abend etwas Zeit finde, schaue ich mir das Programm 
nochmal im Detail an und schick dir nen bisschen verbesserten Quelltext.

MfG
Marius

von Matthias H. (maethes26)


Lesenswert?

Marius Wensing schrieb:
> Die Optimierungen findest du im AVR Studio 5 unter Project - ...
> Properties - Optimization. Da musst du von "None" auf "Optimize for
> Size" umstellen. Dann funktionieren auch die delay-Routinen einwandfrei.
>
> Du solltest deinen Programmcode erstmal überarbeiten. Da sind diverse
> Fehler drin:
> - Zum einen inkludiert man keine C-Dateien... Schreib dir für jedes
> Modul eine entsprechende Header-Datei. Den Rest übernimmt der Linker.
>
> - Außerdem hast du in deinen Taster-Routinen ein "goto" drin, was
> absolut verpönt ist.
>
> Wenn ich heute Abend etwas Zeit finde, schaue ich mir das Programm
> nochmal im Detail an und schick dir nen bisschen verbesserten Quelltext.
>
> MfG
> Marius

Hallo Marius,

vielen Dank für Deine Hilfe.

jetzt arbeitet der Debugger, dank der Einstellung optimize for size.

inkludieren von C_dateien? anders wüßte ich nciht wie das geht

Was ist denn für jedes Modul eine entsptrechende Headerdatei?
Kann mir nur vorstellen Add new Item und darin den Code zu schreiben, 
vielleicht meinst Du ja das?

hatte keinen anderen Ausweg mehr als goto gefunden, das war dann sehr 
bequem.

ich will meine Tastaturfunktion so abändern, dass man diese mit einem 
Übergabeparameter 1 aufrufen kann,

wenn 1 dann läuft die Funktion solange in einer SCleife bis ein 
Zahlenwert gedrückt wurde.

Desweiteren soll sie keine Eingaben annehmen, wenn die Taste nicht 
losgelassen wurde, egal ob die Tastaturroutine mehrmals in einer SCleife 
aufgerufen wird. Wurde der Taster nicht losgelassen, gibt es auch keine 
neue Übergabe des Tastenwertes.

Viele Grüße,

Matthias.

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.