Forum: Mikrocontroller und Digitale Elektronik Variable erhält nach Zuweisung nicht gewünschten Wert


von Nico (Gast)


Lesenswert?

Hallo liebe Gemeinde!

Ich sitze seit ein paar Tagen an einem seltsamen Problem. Zunächst der 
betreffende Codeausschnitt:
1
volatile int i = 0;
2
3
for(i = 0; i < 20; i++)
4
{
5
  USARTWriteChar(0);
6
}

Mein Problem? Die Variable i wird sobald ich sie auf 0 setzte mit dem 
Wert 0xFFFF gesetzt. Dieses Phänomen tritt auch bei anderen Variablen 
auf die ich auf 0 setzte. Dieser Ausschnitt ist teil eines größeren 
Programms. Das Problem tritt im Simulator sowie auf dem Mikrocontroller 
auf.

Jemand eine Idee?

Danke!
Grüße Nico

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nico schrieb:
> Die Variable i wird sobald ich sie auf 0 setzte mit dem
> Wert 0xFFFF gesetzt.

Das erkennst Du wie?

von Karl H. (kbuchegg)


Lesenswert?

Nico schrieb:

> Dieses Phänomen tritt auch bei anderen Variablen
> auf die ich auf 0 setzte. Dieser Ausschnitt ist teil eines größeren
> Programms. Das Problem tritt im Simulator

Im Sumlator wirst du wahrscheinlich mit dem Debugger die Variable 
ansehen. Dem darfst du nicht alles glauben, weil der Optimizer das 
Programm umgestellt hat. Wichtig ist, ob die Funktionaltät gegeben ist.

> sowie auf dem Mikrocontroller
> auf.

Wie stellst du das fest.

> Jemand eine Idee?

Ja. Poste kompletten getesteten Code.
Bei seltsamen Fehlern steckt das Problem des öfteren nicht dort, wo du 
es vermutest. Was du siehst sind die Symptome. Aber das Problem kann 
ganz woanders stecken.

von Davis (Gast)


Lesenswert?

Um die bald folgenden Beiträge im Fluss zu halten, solltest du unter 
keinen Umständen den Controller verraten oder irgendwelche Hinweise 
geben, die zur Lösung deines Problems dienen. Dies gilt auch, wenn die 
Leute versuchen dir die Würmer aus der Nase zu ziehen.

von Nico (Gast)


Lesenswert?

Zunächst habe ich das Problem anhand einer Fehlerhaften Ausgabe 
festgestellt. Ich baue derzeit eine DMX Steuerung, funktioniert auch 
alles wunderbar. Nur wenn ich die Werte im Datenarray (Char) auf 0x00 
setzte wird ein 0xFF ausgegeben. Wird auch vom Oszi bestätigt. Also habe 
ich mich daran gemacht den Fehler zu finden. Um Fehler des Controllers 
auszuschließen auch mal den Simulator zur Hand gezogen. Der meine 
Vermutung bestätigt hat das die Werte einfach nicht richtig übernommen 
werden. Ich arbeite auf einem ATmega328P.

von Niederer Stapel (Gast)


Lesenswert?

Ob, weshalb und wie die Variable i gesetzt wird ist eigentlich voellig 
egal, solange der Loop auf 20 zaehlt. Das i wird naemlich nirgendwo 
gebraucht.

von Niederer Stapel (Gast)


Lesenswert?

Ein Char Array sollte nicht den Wert Null enthalten, dann ist der String 
fertig.

Allenfalls sollte man mit einem Byte Array arbeiten.

von Karl H. (kbuchegg)


Lesenswert?

Nico schrieb:
> Der meine
> Vermutung bestätigt hat das die Werte einfach nicht richtig übernommen
> werden.

OK. vergiss diese Vermutung.
Die ist falsch.


Nochmal: Dein Problem sitzt höchst wahrscheinlich an einer ganz anderen 
Stelle im Code nur nicht in dieser Schleife. Zum mitmeisseln: Nicht in 
dieser Schleife bzw. in ihrer Abarbeitung.

Du kannst uns noch 3 Stunden erzählen was du alles gemacht oder nicht 
gemacht hast. Das Problem ist NICHT in dieser Schleife. Du siehst in 
deiner Ausgabe ein Ergebnis, welches eine Ursache hat. Aber diese 
Ursache ist NICHT, dass der Compiler hier MIst gebaut hat. Die Ursache 
sitzt irgendwo in deinem Code, kein Mensch weiß wo. Wenn du haben 
willst, dass wir dir helfen nach der Ursache zu fahnden, dann ZEIGE 
DEINEN CODE. Du kannst die Symptome und die Stelle die du in Verdacht 
hast noch 5 Tage anstarren und genauso können wir dir noch 5 Tage 
zuhören was du alles getan hast und genau dieselben 3 Codezeilen 
anstarren, deswegen ändert sich nichts. Die Ursache für den Einbruch des 
Dachstuhls war nicht der eine Nagel, der geknickt ist, sondern das 
Erdbeben welches das Haus geschüttelt hat. Du starrst seit Tagen aber 
den Nagel an - dort wirst du die Lösung nicht finden.

von Nico (Gast)


Angehängte Dateien:

Lesenswert?

Hier mein Quellcode im Anhang. Hoffe damit könnt ihr mehr anfangen. Wie 
gesagt das ganze läuft auf einem ATmega328P.

von Karl H. (kbuchegg)


Lesenswert?

richtiger µC im Makefile/AVR-Studio eingestellt?

von Karl H. (kbuchegg)


Lesenswert?

Compilerversion?

von Nico (Gast)


Lesenswert?

GCC Version: 3.3.1.27
Im Projekt wurde auch der Richtige ATmega ausgewählt.

Hab das Problem gelöst danke für eure mühe hat mir sehr geholfen!
Nächste mal gibts gleich ein Codebeispiel :)

Es lag an einer nicht mehr eingebunden Datei die aber noch im Projekt 
lag und mit kompiliert wurde.

Euch allen noch einen schönen Tag!

Nico

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.