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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.