Unterschiedliches Verhalten von Funktion, das sich eigentlich nicht ändern dürfte

OP #1441612
Hallihallo!
Ich bin mal wieder am Verzweifeln... nachdem ich meinen gesamten Code 
nun "gereinigt" habe und das Programm bis zu einem gewissen Punkt 
funktioniert hat, stehe ich wieder mal vor einem Rätsel:
Schaut euch mal diesen Codeausschnitt an:
1
while(1){      
2
                  
3
  var0 = OWFindAll();
4

5
  while(PINSB==0xC0)OUTC=PINSB;
6
}
Erläuterung:
OWFindAll() sucht nach angeschlossenen Bauteilen und liefert die 
gefundene Anzahl zurück.
PINSB ist bei meinem µC (AN2131) auf meiner Platine standardmäßig auf 
0xC0, wenn man einen Taster auf der Platine drückt, ändert sich dieser 
Wert.
FoundROM ist ein ganz normales zweidimensionales Array vom Typ char

Das das Programm müsste ja bei der while-Schleife anhalten (also auf 
einen Tastendruck "warten"). Das tut es hier auch.
Nun mein Problem (dazu folgender Code-Ausschnitt):
1
while(1){      
2
                  
3
  var0 = OWFindAll();
4

5
  while(PINSB==0xC0)OUTC=PINSB;
6

7
    var1=FoundROM[0][0];
8
    var2=FoundROM[0][1];
9
    var3=FoundROM[0][2];
10
    var4=FoundROM[0][3];
11
    var5=FoundROM[0][4];
12
    var6=FoundROM[0][5];
13
}

Hier müsste das Programm ebenfalls anhalten, um nach Tastendruck die 
Wertet des Array in var... zu kopieren. Doch ich musste feststellen, 
dass das Programm nicht wartet, sondern immer wieder von vorne startet 
(und somit die Schleife anscheinend nie erreicht...
Wie kann ein Array solche Auswirkungen haben?!?!
Für alle, denen der Ausschnitt nicht reicht, im Anhang ist der komplette 
Code... (sorry, 2 mal der gleiche...)

Viele Grüße,
Stefan
Angehängte Dateien:
Gast
Mach doch mal die Variablen var0 bis var7 zu lokalen Variablen, also nur 
innerhalb von main gültig.
Ich verstehe & misstraue daher deiner Definition von diesen Variablen 
(nicht).
OP
Die Programmzeile

if (rslt) rslt = OWVerify();

soll nur verifizieren, dass ein Bauteil mit dem erkannten Romcode auch 
wirklich vorhanden ist (dazu wird das gleiche Bauteil einfach nochmals 
gesucht, bei Erfolg wird 1, bei Misserfolg wird 0 zurückgegeben).

Die Variablen var0 bis var7 habe ich nun mal zu lokalen Variablen 
gemacht, aber das Programm stürzt an der Stelle, an der das Array in die 
var1 bis var6 kopiert wird, immer noch ab (und startet danach neu).
Das ist sehr mysteriös...

Viele Grüße,
Stefan
OP
Also ich habe nochmals ausprobiert:
Dieser Codeausschnitt läuft:
1
while(1){      
2
                  
3
  var0 = OWFindAll();
4

5
  while(PINSB==0xC0)OUTC=PINSB;
6
    var0=FoundROM[0][0];
7
    var1=FoundROM[0][0];
8
    var2=FoundROM[0][1];
9
    var3=FoundROM[0][2];
10
    var4=FoundROM[0][3];
11
}

Und dieser Codeausschnitt läuft nicht:
1
while(1){      
2
                  
3
  var0 = OWFindAll();
4

5
  while(PINSB==0xC0)OUTC=PINSB;
6
    var0=FoundROM[0][0];
7
    var1=FoundROM[0][0];
8
    var2=FoundROM[0][1];
9
    var3=FoundROM[0][2];
10
    var4=FoundROM[0][3];
11
    var5=FoundROM[0][4];
12
    var6=FoundROM[0][5];
13
}

Obwohl nur zwei var... mehr beschrieben werden... Hilfe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.