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
Das Problem liegt hier: >>> // Andere Funktionen und Anweisungen >>> // ... das wirst Du einfügen müssen bzw. ein Listing anhängen. Gruß T.
Stack versemmelt. Anderen Speicherbereich vesemmelt. Interrupts versemmelt.
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?
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.
>>> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.