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
Tino K. schrieb: > keiner irgendeine Idee? Schalte die Optimierung aus. Codeumstellungen usw. verhindern bei -O1 usw. effektives Debuggen. leo
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.