Forum: Mikrocontroller und Digitale Elektronik attiny84 debug falscher Sprungpunkt


von Tino K. (blumengiesser)


Lesenswert?

Attiny84 wird unter AVR Studio 7 kompiliert und per Debug Wire in der 
Ausführung überprüft. Dabei springt der Code nicht dahin wo er 
eigentlich landen sollte. Ich habe für die Verdeutlichung ein Video 
gemacht. Er landet "wahrlos" in einem Programmteil, der auch per IF nur 
bei bestimten Werten erreicht werden sollte. Das passiert je nachdem was 
im Progrmm deaktiviert wird anders und wenn die Compiler Optionen 
verändert werden auch. Sprich bei -O1 ist es anders als bei -O2. in den 
EInstellungen steht, avr-gcc und die gesamten Optionen lauten:

-x c -funsigned-char -funsigned-bitfields -DDEBUG  -I"C:\Program Files 
(x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.147\include"  -O1 
-ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 
-Wall -Wundef -mmcu=attiny84 -B "C:\Program Files 
(x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.147\gcc\dev\attiny84" 
-c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" 
-MT"$(@:%.o=%.o)"

Diese werden automatisch vom AVR Studio erzeugt, falls es daran liegt. 
Ich hatte vorher die ganzen CASE Anweisungen als IF aber das gleiche 
Phänomen...

https://youtu.be/lFnwkO-RIts

Ideen?

Das einzige das wirklich anders ist, Win10. Aber ich glaube nicht 
daran...

: Bearbeitet durch User
von Tino K. (blumengiesser)


Lesenswert?

keiner irgendeine Idee?

von leo (Gast)


Lesenswert?

Tino K. schrieb:
> keiner irgendeine Idee?

Schalte die Optimierung aus. Codeumstellungen usw. verhindern bei -O1 
usw. effektives Debuggen.

leo

von K. S. (the_yrr)


Lesenswert?

Tino K. schrieb:
> keiner irgendeine Idee?

zum eigentlichen Thema nicht, aber:

- Quelltext als Textdatei hochladen, das schaut sich so niemand an.
- 1-2 Screenshots reichen locker aus (wenn überhaupt), wozu das video?
- Welche Hardware zum debuggen?


- springt der immer an dieselbe Stelle nach einem Reset ohne neu 
kompilieren?
- Wann springt der "wahllos"? sobald du verbindest, bei bestimmten 
Befehlen/Zeilen oder ...?
- wie wahllos springt der wirklich? Sind das Anfänge von Blöcken die 
sowieso angesprungen werden sollten (if/else oder funktionen z.b.)?
- sprtingt der nur wenn du debugst oder sonst auch, eventuell 
Statusinformationen über uart ausgeben für alternatives debuggen.

von Stefan F. (Gast)


Lesenswert?

Das kommt vom Optimizer, der deinen Code bis zur Unkenntlichkeit 
umschreibt.

Benutze die Option -Og, dann wird Debug-Freundlich optimiert oder -O0 um 
den Optimizer ganz abzuschalten. Die Funktionen _delay_ms() und 
_delay_us() versagen allerdings, wenn man den Optimizer ganz abschaltet.

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.