Forum: PC-Programmierung Atmel Studio 6 Simulator überspringt 1. Befehl in while-schleife / Simuliert falsch


von Max K. (jjooeeyy)


Lesenswert?

Hey alle zusammen,

ich habe da ein "Problem", und zwar habe ich folgenden Code:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
   do
6
   {
7
    PORTA = 255;
8
    asm("nop");
9
    PORTA = 0;
10
    asm("nop");
11
   }while(1);
12
}


Eigentlich nichts wildes also, wenn ich das ganze aber Schritt für 
Schritt simuliere, überspringt der kleine gelbe PC-Pfeil nach dem 
letzten asm("nop"); den Befel PORTA = 255; und landet direkt beim 1. 
asm("nop");.
(Ausgeführt wird PORTA=255; allerdings im Simulator, das sieht man im 
IO-Fenster.) Gibt es da eine Möglichkeit dass wirklich jeder Schritt 
angezeigt wird?

Bei dem oberen Beispiel ist das alles nicht so schlimm, bei einem 
anderen Code habe ich aber das Problem dass der PC direkt in eine 
If-Schleife springt, obwohl er da eigentlich nie landen darf. Der Code 
lautet wie folgt:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
bool statement = false;
5
int main(void)
6
{
7
  DDRA = 255;
8
   do
9
   {
10
     if (statement) 
11
     {
12
       PORTA = 255;
13
       _delay_ms(1000);
14
     }
15
     else
16
     {
17
       PORTA = 0;
18
     }
19
    
20
   }while(1);
21
}

Hier springt der Code beim ersten Durchlauf der do-Schleife zu PORTA = 
255;. (Ausgeführt wird er allerdings nicht, im IO bleibt PORTA bei 0)
Dies geschieht aber nur im Simulator, wenn ich diesen Code auf den 
ATmega324PA schreibe, bekommt der PORTA keine Spannung.

Ist etwas nervig so zu programmieren, wenn die Simulation fehlerhaft 
läuft :D

Danke schonmal für alle Tipps und Hinweise,

Max

: Bearbeitet durch User
von Kaj (Gast)


Lesenswert?

schalt mal die optimierung ab

von Max K. (jjooeeyy)


Lesenswert?

Hey Kaj,

hab die Optimierung abgeschaltet, und das zweite Codebeispiel getestet, 
jetzt läuft zwar die if-Schleife richtig, allerdings springt der PC am 
Ende der do-while-Schleife erstmal wieder zu int main() und von dort 
wieder zur if-Abfrage...
Alles irgendwie noch was verwirrend wenns man etwas komplexer wird...

von Kaj (Gast)


Lesenswert?

Max K. schrieb:
> jetzt läuft zwar die if-Schleife richtig
Sorry, aber das muss sein!
http://if-schleife.de/

Max K. schrieb:
> allerdings springt der PC am
> Ende der do-while-Schleife erstmal wieder zu int main() und von dort
> wieder zur if-Abfrage...
Ja, der Simulator macht da am Anfang Dinge, die ich auch nicht verstehe 
(ich denke irgendwelche initialisierungen?). Das macht der Simulator 
aber auch nur zum Anfang der Simulation, danach sollte er richtig 
laufen.

von Max K. (jjooeeyy)


Lesenswert?

Okay okay okay, ich werde mich bessern :D
(Es war ja schon spät, ich nutze das jetzt mal als Ausrede)

Dann werd ich wohl damit leben müssen, dass der da komisch 
umherspringt...

Danke dir auf jeden Fall :)

von Vlad T. (vlad_tepesch)


Lesenswert?

[Offtopic]

Kaj schrieb:
> Sorry, aber das muss sein!
> http://if-schleife.de/

wobei das auch komisch ist.
Ich vermute, wenn jemand "if-Schleife" sagt, meint er den ganzen Block.
"If-Abfrage" bezieht sich nach meinem Empfinden nur auf die Bedingung 
selbst und nicht den Block (If-Block?)


[/Offtopic]

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.