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

OP #4358418
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
OP #4358447
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...
Gast #4358646
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren