Debbuging Modus funktioniert nicht wie er sollte (AMTEL Studio 7)

OP #5201609
Lesenswert?

Hallo liebe Forenmitglieder,

als Mikrocontroller-Neuling wollte ich einfache Programme im ATMEL 
Studio 7 (Simulator) programmieren.

Jedoch scheint es als ob mir der Debugging-Modus einen Streich spielen 
möchte.

Ich verwende für den Simulator einen ATMEL 32.

Hier der Code:
1
#include <avr/io.h>
2

3
int main(void)
4
{
5
    DDRA = (1 << PA7);  // PORTA (Pin A7) auf Ausgang setzen
6
  
7
    while (1) 
8
    {    
9
       PORTA |= (1<<PA7);    //Bit setzen
10
       PORTA &= ~(1 << PA7); //Bit löschen
11
    }
12
}

Sofern die Syntax und die Semantik stimmen, müsste nun die 
while-Schleife fortlaufend laufen und ständig das Bit setzen und 
löschen.
Wenn ich auf Step-Over klicke um die einzelnen Schritte durchzugehen, 
setzt er erstens das Bit überhaupt nicht und bleibt sogar beim Befehl 
"PA7 Bit löschen" einfach stehen, also wiederholt die Schleife nicht 
mehr.

Bin ich blöde, dass ich keinen Fehler erkennen kann, oder dazu ein Bug 
bekannt?
Bitte um Hilfe

lG
OP #5201800
Lesenswert?

Hab es auch mit "Step Into" probiert.
Er setzt mir zwar den Port PA7 auf Ausgang.
Jedoch bleibt der Debugger wieder beim "Löschen Befehl" stecken und 
wiederholt die Schleife auch beim mehrmaligen "Step Into" oder "Step 
Over" klicken nicht mehr.

Ps. Ich möchte ja auch nicht aus der Schleife raus, ich möchte nur dass 
die Schleife unendlich mal wiederholt wird und die Befehle auch 
ausgeführt werden, was beides bei mir leider nicht geschieht.

lG
OP #5202044
Lesenswert?

Stefan U. schrieb:
> Versuche mal, den Optimizer zu deaktivieren, mittels Compiler Option -O0

Wow jetzt funktioniert alles einwandfrei :D
Kannst du mir erklären was das genau bewirkt? Merkt sich der Compiler 
bei der Ausführung, dass genau der gleiche Vorgang durchgeführt wird und 
deswegen aus Optimierungsgründen nicht mehr wiederholen möchte?

> Blöde Frage, ich weiß - hast Du "Built Solution (F7)" ausgeführt?

Sowie "Built Solution" als auch "Built 'Mein Projekt'".

lG
Gast #5202125
Lesenswert?

Maximilian S. schrieb:
> Stefan U. schrieb:
>> Versuche mal, den Optimizer zu deaktivieren, mittels Compiler Option -O0
>
> Wow jetzt funktioniert alles einwandfrei :D

Nö, das kann es nicht gewesen sein. Ich habe mit -O3 compiliert:
1
int main(void)
2
{
3
  DDRA = (1 << PA7);  // PORTA (Pin A7) auf Ausgang setzen
4
  6c:  80 e8         ldi  r24, 0x80  ; 128
5
  6e:  8a bb         out  0x1a, r24  ; 26
6
  
7
  while (1)
8
  {
9
    PORTA |= (1<<PA7);    //Bit setzen
10
  70:  df 9a         sbi  0x1b, 7  ; 27
11
    PORTA &= ~(1 << PA7); //Bit löschen
12
  72:  df 98         cbi  0x1b, 7  ; 27
13
  }
14
  74:  fd cf         rjmp  .-6        ; 0x70 <main+0x4>
15

16
00000076 <_exit>:
17
  76:  f8 94         cli
18

19
00000078 <__stop_program>:
20
  78:  ff cf         rjmp  .-2        ; 0x78 <__stop_program>

Um SBI und CBI kommt der Compiler nicht herum.
OP #5202665
Lesenswert?

> Nö, das kann es nicht gewesen sein. Ich habe mit -O3 compiliert:

Bei wir war der Optimizer auf -01 eingestellt wo es nicht funktioniert 
hat.
Auf -03 wird auch nichts bei der I/O View ersichtlich.
Nur auf -00 geht er wirklich wiederholt die einzelnen Schritte durch und 
zeigt diese auch bei der I/0 View an.
Gast #5202682
Lesenswert?

hi,
... gcc optimization/simulation - das verhalten kenne ich.
ist eigentlich ganz logisch, weil wenn der gcc rum optimiert, wie soll 
dann der c source code noch dazu passen?!
da stimmt dann auch kein breakpoint mehr und es sieht so aus, als wenn 
nichts richtig funktioniert.

stimmt aber nicht!

daher, geh mal im simulator auf disassembly und dann step rum!
dann siehst du, dass alles so läuft wie erwartet.


major tom
Gast #5202694
Lesenswert?

majortom schrieb:
> daher, geh mal im simulator auf disassembly und dann step rum!
> dann siehst du, dass alles so läuft wie erwartet

Guggst Du Video :-) - brauchst dann nicht auf "disassembly - wo soll das 
im debugger sein und wie soll er da rumsteppen - erzähl mal bitte ?" zu 
gehen.

majortom schrieb:
> ist eigentlich ganz logisch, weil wenn der gcc rum optimiert, wie soll
> dann der c source code noch dazu passen?!

Mal ausprobiert - für das Beispiel? Ja, ich kenne die 
Optimierungs-Probleme auch, deshalb habe ich mal gespielt.

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