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

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.