Schleifenvariablen im AVR Simulator werden nicht gezählt

OP #3380800
Lesenswert?
• ▲
▼
Hallo zusammen!

Ich versuche gerade einen Code im Simulator des AVR Studio 6.1 laufen zu 
lassen. Dabei ist mir aufgefallen, dass meine Schleifenvariablen immer 
mit dem Wert 0 angezeigt werden. Auch nach einem oder zwei Durchläufen 
hab ich hier immer noch die Null stehen. Trotzdem springt der Simulator 
aber nach der benötigten Anzahl der Schleifendurchläufe aus der Schleife 
raus!

Ich habe bereits die Optimierungseinstellungen des Compilers ganz 
ausgeschlatet. Aber die Schleifenvariablen sind und bleiben bei Null! 
Weiß zufällig jemand hier woran es liegen könnte?


Gruß
Andreas
OP #3380847
Lesenswert?
• ▲
▼
Ihr Schlaumeier!

Es hat nichts mit dem Code zu tun! Sondern wird an irgendwelchen 
Einstellungen liegen

Aber bitte...... hier ist die For-Schleife um die es geht:
1
int i;
2
int spalte;
3
int zeile;
4
Matrix_3x3 invMatrix;
5
double HM[5][5];
6
  
7
//Erstellen einer 5x5 Hilfsmatrix
8
for(zeile=0; zeile<3; zeile++){
9
  for(spalte=0; spalte<3; spalte++){
10
    HM[spalte][zeile]=M1.data[spalte][zeile];
11
  }
12
}
13
.
14
.
15
.

Matrix_3x3 ist eine struct-Variable die per typdef definiert ist und hat 
in data ein 3x3 Aray.
OP #3381031
Lesenswert?
• ▲
▼
Ich hab doch schon in meinem Post geschrieben, dass ich die Optimierung 
ganz ausgeschaltet hab! Ich hab also schon mit -O0 compiliert! Daran 
liegt es nicht!

Andreas S. schrieb:
> Ich habe bereits die Optimierungseinstellungen des Compilers ganz
> ausgeschlatet. Aber die Schleifenvariablen sind und bleiben bei Null!
> Weiß zufällig jemand hier woran es liegen könnte?
#3381771
Lesenswert?
• ▲
▼
Andreas S. schrieb:
> Daran
> liegt es nicht!

Aber er beschreibt die richtigen Array-Felder, korrekt?

d.H. es wird garantiert irgendwo irgendwie richtig gezählt, nur dein 
Simulator/Debugger zeigt das nicht an.

Ich würde an der Stelle einfach dem Compiler vertrauen. Wenn der eine 
dumme 0…2-For-Schleife nicht hinkriegen würde, wäre das bestimmt schon 
jemandem aufgefallen...
Versuchs vielleicht noch mit Volatile an deinen Schleifenzählern, wenn 
du wirklich unbedingt beim zählen zuschauen willst.

Ansonsten: Bugs im Debugger/Simulator sind *viel, viel* warscheinlicher 
als Bugs im Compiler.
OP #3382344
Lesenswert?
• ▲
▼
Martin Kreiner schrieb:
> Deklariere mal die Variablen zusätzlich mitvolatile

Hatte ich auch schon probiert --> gleiches Ergebnis!

Martin Kreiner schrieb:
> Wie du mit der Schleife allerdings eine 5x5 Matrix erstellen willst,
> musst du mir noch erklären.

Die Punkte in meinem Code deuten an, dass die Funktion da noch weiter 
geht!


Mittlerweile habe ich noch ein bisschen rum probiert und festgestellt, 
dass die Probleme mit den Schleifenvariablen nur dann auftauchen, wenn 
ich sie in einer Funktion einsetze die als Rückgabewert meinen struct 
haben. Also in meinem Fall die Stuktur die ich mit
1
struct Matrix3x3{
2
  double data[3][3];
3
  double Determinante;
4
};
5
typedef struct Matrix3x3 Matrix_3x3;

definiert habe.
#3382367
Lesenswert?
• ▲
▼
Dann erklär nochmal dein Problem:

Ist es, dass du dem (simulierten) µC beim Zählen bis drei zusehen 
willst, das aber nicht klappt, oder ist es, dass deine Berechnung 
schiefgehen, weil die Schleife nicht dreimal durchlaufen wird?

Wenn ich deinen Quelltext soweit zusammenkopiere und kompiliere, dann 
schaut das alles problemlos & richtig aus.

Kommt zwar mords-umständlicher ASM-Code bei raus (16 Bit für eine 
Schleifen-Zählvariable, die nur bis 3 zählt...) aber, es wird gezählt:

...
1
.LM5:
2
        ldd r24,Y+1
3
        ldd r25,Y+2
4
        cpi r24,3    ;   <<< "spalte < 3"
5
        cpc r25,__zero_reg__
6
        brge .+2
7
        rjmp .L4
8
        .stabn  68,0,16,.LM6-.LFBB1
9
.LM6:
10
        ldd r24,Y+3
11
        ldd r25,Y+4
12
        adiw r24,1  ; <<< "zeile++"
13
        std Y+4,r25
14
        std Y+3,r24
15
.L2:
16
        .stabn  68,0,16,.LM7-.LFBB1
17
.LM7:
18
        ldd r24,Y+3
19
        ldd r25,Y+4
20
        cpi r24,3   ;  <<< "zeile < 3"
21
        cpc r25,__zero_reg__
22
        brge .+2
23
        rjmp .L5
...
Angehängte Dateien:

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.