Gast
#327961
Moin,
ich verzweifele ;-)
Gegeben ist eine Schleife, in der eine Funktion aufgerufen wird:
void konfiguration_Standheizung (void)
{
// Darstellung auf LCD
SH.Steuern = konfiguration_JaNein (SH.Steuern,
KONFIG_STEUERN_POSITION, txtSteuern);
// Tastenabfrage mit Rücksprung
}
Die Struktur SH ist global definiert; alle Typen passen zueinander.
KONFIG_STEUERN_POSITION enthält die x-Koordinate, txtSteuern den Text
für das Display.
In konfiguration_JaNein wird über eine Tastenabfrage der Wert von
SH.Steuern zwischen 0 und 1 umgeschaltet.
unsigned char konfiguration_JaNein (unsigned char frage,
unsigned char pos, char *text)
{
...
frage = KONFIG_JA; // 1
...
oder
frage = KONFIG_NEIN; // 0
...
return frage;
}
Es laufen derzeit mit Ausnahme der Tastaturabfrage keine Interrupts,
die irgendwelche Werte verändern.
Mit ca. 8 Strukturen, die sehr ähnlich wie SH aufgebaut sind,
funktioniert dieses Konstrukt einwandfrei. Nur mit SH nicht.
SH.Steuern wechselt ohne erkennbares Muster seinen Wert :-(
Ist der z.B. vor dem Aufruf von konfiguration_JaNein 1, wird ab und an
1 übergeben, meist hat frage jedoch einen anderen Wert. Das Gleiche
passiert beim return; es ist in SH.Steuern ein anderer Wert als von
konfiguration_JaNein zurückgegeben.
Wie gesagt, mit allen anderen Strukturen passiert das nicht. Auch nicht
mit einer identischen, mit der ich das testweise probiert habe.
Es gibt keine die Werte manipulierenden Interupt-Routinen, es wird auch
sonst nirgends auf SH zugegriffen!
Ich habe 2 µCs ausprobiert, den Compiler (ICC) mal mit und mal ohne
Komprimierung laufen lassen; es gibt keinerlei Warnungen. Hat alles
nicht geholfen.
Warum passiert das nur bei der einen Struktur?
Mir ist klar, dass es irgendwo im Programm einen Fehler geben kann, der
dafür verantwortlich ist. Ich finde ihn aber nicht. Und ich kann hier
natürlich nicht 30K Code posten ;-)
Deswegen die Frage:
Welcher typischer Fehler könnte dafür verantwortlich sein?
Danke, zaydo