Forum: Mikrocontroller und Digitale Elektronik Variable (int) nimmt unmöglichen Wert an


von Henning V. (armselig)


Lesenswert?

Hallo und guten Tag,

ich programmiere zur Zeit die Firmware (Programmiersprache C) eines 
Mikrocontrollers (LPC2148) und habe ein Problem, bei dem ich mir selber 
nicht mehr weiterhelfen kann.

Und zwar habe ich eine Variable (int) die ich mit jedem "Durchgang" um 
eins erhöhe.. also ganz trivial:

int counter;

while(counter < 100)
{
   // Andere Funktionen und Anweisungen
   // ...

   counter++;

   // Ausgabe der Variable counter in ein Logfile
}

Nun passiert es jedoch, dass, wenn ich mir die Werte in ein Logfile 
ausgeben lasse die Variable counter ab und zu folgende Werte annimmt:

40
41
42
43
741749554
-> hier bricht das Programm ab, da 741749554 größer als 100 ist


Kann mir jemand einen Tipp geben, wie so etwas möglich ist?? Woher kommt 
diese abnormal hohe Zahl (die im übrigen immer so im 700 Mio.-Bereich 
ist.
Wie kann ich das eventuell vorbeugen?

Über Ratschläge würde ich mich freuen!

VG

von THaala (Gast)


Lesenswert?

Das Problem liegt hier:

>>>   // Andere Funktionen und Anweisungen
>>>   // ...

das wirst Du einfügen müssen bzw. ein Listing anhängen.
Gruß T.

von M, nicht Q (Gast)


Lesenswert?

Stack versemmelt. Anderen Speicherbereich vesemmelt. Interrupts 
versemmelt.

von Henning V. (armselig)


Lesenswert?

THaala schrieb:
> Das Problem liegt hier:
>
>>>>   // Andere Funktionen und Anweisungen
>>>>   // ...
>
> das wirst Du einfügen müssen bzw. ein Listing anhängen.
> Gruß T.

Vielen Dank für die schnelle Antwort!

Kann der Fehler auch dort liegen, obwohl ich die Variable counter sonst 
nirgends "anfasse" also auslese oder verändere?

von lalala (Gast)


Lesenswert?

Henning Vogel schrieb:
> Wie kann ich das eventuell vorbeugen?

z.B. hier

Henning Vogel schrieb:
> // Andere Funktionen und Anweisungen
>    // ...

nicht auf Array Elemente ausserhalb der gültigen Bereiche zugreifen.

von THaala (Gast)


Lesenswert?

>>> Kann der Fehler auch dort liegen, obwohl ich die Variable counter
>>> sonst irgends "anfasse" also auslese oder verändere?

Ja. Genau darum geht es...
>>>>   // Andere Funktionen und Anweisungen
>>>>   // ...
Entferne den Kram dazwischen und das Problem verschwindet auch.....

Gruß T.

von Karl H. (kbuchegg)


Lesenswert?

Henning Vogel schrieb:

> Kann der Fehler auch dort liegen, obwohl ich die Variable counter sonst
> nirgends "anfasse" also auslese oder verändere?

Du musst nicht explizit auf die Variable zugegriffen haben. Es reicht 
völlig, wenn du an irgend einer anderen Stelle im Programm den 
Speicherbereich (in dem die Variable liegt) niedergebügelt hast. 
Arrayzugriffe sind beispielsweise dafür ein heißer Kandidat:
1
int i;
2
int a[3];
3
int j;
4
5
6
  i = 5;
7
  j = 5;
8
  a[3] = 8;

die Chancen stehen gut, dass durch das Beschreiben von a[3] (welches 
nicht existiert), entweder i oder j seinen Wert ändert.

von Irgendwer (Gast)


Lesenswert?

Henning Vogel schrieb:
> int counter;
>
> while(counter < 100)

hier dürfte schonmaldas erste Problem sein das du mit einem völlig 
undefinierten Wert beginnst.

int counter=0;
while(counter < 100)
...

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.