Die Laufbedingung bricht ab und das Programm startet von beginn (Wie
RESET). Wenn Variablen fahrt_counter = 0; counter_endwert = 0 in
PrintData() gelöscht werden, wiederholt die while (fahrt_counter > 3)
problemlos. wenn ich Variable fahrt_counter = 0; counter_endwert = 0
dazu schreibe, bricht die Laufbedingung der while (fahrt_counter > 3)
aber auch while(1) !!!! warum ? kann jemand mir das erklären warum mein
Code so läuft. Danke
Der Fehler dürfte im nicht geposteten Code zu finden sein.
Ein while (1){...} wird regulär nur durch break oder goto verlassen.
Du könntest aber auch Fehler wie Stack Overflows im Code drin haben, das
gibt dann gar lustige Folgen. Oder der Controller geht in den Reset und
das Programm startet dadurch neu.
Kopiere deinen Code von oben mal da rein:
http://esprima.org/demo/validate.html
Und dann versuch mal gültiges C zu bekommen.
Dann noch ein lauffähiges Minimalbeispiel für uns, aber ich denke wenn
du oberen Punkt erledigt hast ist das Problem schon weg.
Das bringt garnichts, unvollständigen Code zu posten ... Es gibt viele
Möglichkeiten ... Könnte ein Interrupt sein, der spinnt oder oder oder,
aber man sieht ja keinen Code.
Kann gut sein, dass in dem Teil, den du gepostest hast, kein solcher
Fehler vorliegt, weshalb deine Verwunderung zurecht ist.
Poste mal den Rest bitte :)
Was machen denn die Variablen die Du 0 setzt?
Division durch Null in einer Funktion?
Prima Gelegenheit den Debugger zu bemühen, bzw. Debug Nachrichten zu
senden.
Thomas E. schrieb:> Derartige Fehler liegen immer da, wo sie garantiert nicht liegen.
Derartige Fehler liegen garantiert immer da, wo sie garantiert
nicht liegen.
hp-freund schrieb:> Prima Gelegenheit den Debugger zu bemühen
Derjenige der weiss dass der Fehler garantiert nicht "da" ist,
braucht auch keinen Debugger.
Dann schreib' Dir doch mal hinter die while-Schleife in main einen
Debugmarker (gib' was aus, lass eine LED angehen...) und mach danach
eine leere while(1) Schleife.
Damit solltest Du sehen können, ob die Schleife sauber abgebrochen wird
oder doch etwas anderes (wie andere schon geschrieben haben) der Grund
ist.
Hallo,
einer der häufigsten Fehler, bei dem scheinbar die while(1) unterbrochen
wird, ist ein fehlender Interrupt-Handler.
Aber mal im Ernst: über welchen Prozessor unterhalten wir uns eigentlich
?
Gruß,
Micha
Hobbyflieger schrieb:> Das Problem wo anderes.
Aha. Wo denn?
> warum wird die Laufbedingung der While(1) abgebrochen.
Wird sie nicht. Das sieht nur so aus. Der Controller bootet vermutlich
neu, weil irgendwas in dem Code passiert, den Du uns nicht zeigst.
Ich denke auch, das Teil bootet neu.
Ähnliche Dinge hatte ich auch schon mal. Jetzt toggle ich da immer einen
Ausgang. Dann kann man ein Oszi drauf ansetzen.
Kann es sein, dass dir VCC des controllers wegknickt (z.B. weil
irgendetwas eingeschaltet wird)?
Wenn möglich, wäre ein Oszi an der Versorgungsspannung ggf.
aufschlussreich.
Gegen stack overflow compiliert man z.B. bei GCC mit der Option
-fstack-usage. Dann sucht man sich den Codepfad mit der schlimmsten
Stackbenutzung anhand der .su-Dateien raus, addiert noch die Interrupts
drauf, plus ein wenig Sicherheitsreserve (etwa 512-1024 Bytes) und schon
weiß man, was man braucht.
Sonst hast Du das Problem, daß es scheinbar läuft, aber sobald die
Interrupts ausgerechnet im Moment maximaler Stackbenutzung kommen,
knallt es gelegentlich trotzdem. Sehr schwer zu debuggen.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.