Schleifenvariablen im AVR Simulator werden nicht gezählt

#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
#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.
#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.
#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

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