Atmel Studio 6 Erste Schritte: Debug / Watch

OP #2997541
Lesenswert?

Hallo,
Ich habe ein erstes Testprogramm im Atmel Studio 6 erstellt und versuche 
nun, dieses im Debugger laufen zu lassen (siehe angehängtes Bild).

Folgende Fragen sind aufgetaucht:
- Warum kann auf die letzte Zeile "turns++" kein Breakpoint gesetzt 
werden? Beim Continue mit dem grünen Pfeil springt der Programmablauf 
zwischen den beiden oberen Breakpoints hin und her, erreicht aber den 
letzten nicht.

- Rechtsklick auf die Deklaration/Definition von "turns", Add Watch -> 
Symbol wird in Watch1 aufgenommen -> ok. Warum aber wird "No location 
for symbol" gemeldet?.

Gruss
Angehängte Dateien:
OP #2997644
Lesenswert?

Ralf G. schrieb:
> Wenn nicht, dann könnte die Variable Opfer der Optimierung geworden
> sein.
1
int main(void)
2
{
3
  int turns = 0;
4
    
5
  while(1)
6
    {
7
    PORTC = turns;
8
    PORTB ^= (1 << PORTB0);
9
    _delay_ms(5);
10
    PORTB ^= (1 << PORTB1);
11
    _delay_ms(5);
12
    PORTB ^= (1 << PORTB2);
13
    _delay_ms(5);
14
    turns++;
15
    }
16
}
Auch wenn "turns" verwendet wird: gleiches Bild
Breakpoint auf "turns++" geht nicht.
Gast #2999005
Lesenswert?

Hi

>-> da haben wir wohl etwas aneinander vorbei gepostet...

Nein. Du liest einen Wert vom Port ein. Nach etwas Blabla inkementierst 
du den Wert. Dann wird neu vom Port gelesen und damit der inkrementierte 
Wert überschrieben.

Also, wo ist jetzt die Stelle, an der du mit 'turns' etwas sinnvolles 
machst?

MfG Spess
OP #2999030
Lesenswert?

spess53 schrieb:
> Nein. Du liest einen Wert vom Port ein. Nach etwas Blabla inkementierst
> du den Wert. Dann wird neu vom Port gelesen und damit der inkrementierte
> Wert überschrieben.
Andersrum. PORTC wird geschrieben, nicht gelesen.
Nachstehend ist das Code-Fragment ohne PORTB und delay:

hawa mand schrieb:
>
1
> int main(void)
2
> {
3
>   int turns = 0;
4
> 
5
>   while(1)
6
>     {
7
>     PORTC = turns;
8
>     turns++;
9
>     }
10
> }
11
>
-> turns an PORTC zuweisen, turns inkrementieren.
#2999147
Lesenswert?

@ hawa mand:
Das einzige, was mir einfällt (ohne Anspruch auf Richtigkeit):

Im Test1.lss finde ich:
  e6:  8f 5f         subi  r24, 0xFF  ; 255
wobei "r24" "turns" entspricht:
    PORTC = turns;
  ae:  88 b9         out  0x08, r24  ; 8
und "subi  r24, 0xFF" entspricht "turns++;" (ich hoffe, ich habe richtig 
gerechnet, dass -255 einem +1 entspricht).

Lediglich der Quellcode "turns++;" steht nicht im Listing - warum auch 
immer. Daher geht auch der Breakpoint nicht.

Danach müsste das Programm zumindest richtig arbeiten. Hast Du das mal 
getestet?

Gruß Dietrich

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