Forum: Compiler & IDEs Atmel Studio 7 Simulator Debug


von Donni D. (Gast)


Lesenswert?

Hey Leute,

langsam halte ich mich für blöde. Einmal mein seeehr winziges Programm:
1
#define F_CPU 8000000UL
2
3
#include <avr/io.h>
4
5
int main(void)
6
{
7
  uint8_t count = 0;
8
    while (1) 
9
    {
10
    count++;
11
    }
12
}
Nutze das Atmel Studio 7, als Ziel ist nen ATtiny9 gewählt und als 
Debugger der Simulator. Wenn ich die Simulation starte hängt er an der 
öffnenden Klammer von der Main fest und kommt einfach nicht weiter. Gibt 
es da irgend welche Magic Einstellungen die man setzen muss? Hatte 
Damals nur das 6er Studio, da musste ich meines Wissens nichts extra 
einstellen.

Liebe Grüße

von Kisig (Gast)


Lesenswert?

Deine Schleife wird vermutlich weg optimiert. Wie sieht das 
Assemblerlisting aus?

von Donni D. (Gast)


Lesenswert?

Ich denke du meinst das lss-File oder? In der Tat habe ich da noch nicht 
nachgeschaut, hätte ich auch drauf kommen können. Und die Schleife wurde 
tatsächlich wegoptimiert, die main besteht nur noch aus nem jump zum 
Exit. Hätte gedacht die Optimierung wäre bei nem Debug-Build automatisch 
aus, aber so kann man sich irren. Habe sie nun ausgestellt und siehe da, 
es geht, vielen Dank!

Eine Frage aber noch: Ich kann bei der Optimierung eine der Stufen 1 - 3 
wählen oder 0 für aus, bzw. g für 'Debugging experience'. Wie kann ich 
mir die Optimierung bei dem Wert -Og vorstellen?

Liebe Grüße

von Oliver S. (oliverso)


Lesenswert?

Probiere es halt aus.

Und ansonsten empfiehlt sich für alle AVRs eher die Option s zur 
Optimierung.

Oliver

von Christopher J. (christopher_j23)


Lesenswert?

Donni D. schrieb:
> Eine Frage aber noch: Ich kann bei der Optimierung eine der Stufen 1 - 3
> wählen oder 0 für aus, bzw. g für 'Debugging experience'. Wie kann ich
> mir die Optimierung bei dem Wert -Og vorstellen?

-Og sorgt unter anderem dafür, dass völlig unnötige Load- oder 
Store-Operationen von bzw. auf den Stack wegoptimiert werden. Ansonsten 
entspricht wie bei -O0 der generierte Assembler ziemlich exakt dem 
C-Code, also keine Optimierungen, wie Inlining o.Ä.. Ich persönlich 
finde den generierten Assembler mit -Og deutlich besser lesbar als mit 
-O0, weil der Assembler auf das wesentlichste konzentriert ist. -Og gibt 
es aber erst ab GCC 5.

Hier mal ein ganz knappes Beispiel mit einem GCC-ARM:
https://godbolt.org/g/yEku3P

Das Beispiel ist natürlich etwas konstruiert und in der Realität hat man 
eher nicht so knappe (und überflüssige) Funktionen aber wenn man das mal 
auf -O0 stellt, dann erkennt man sofort den Vorteil von -Og.

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.