"Prozess" killen

Gast #65933
Lesenswert?

Hallo zusammen,

ich progge einen 80C537 und habe gerade folgendes Nervenraubende Prob:

Ich habe einen Timer laufen, der jede Milisekunde auslöst und Messwerte
aufnimmt. Die kommen aus dem AD Wandler, Capture / Compare, DS1820, I2C
usw.

Jetzt habe ich noch eine Endlosschleife laufen, in der die Daten auf
einem Grafikdisplay laufen. Diese Endlosschleife bleibt irgendwann an
irgendeiner Stelle stehen, die ich in dem komplexen Code nur schwer
erkennen kann. Jetzt möchte ich als erste große Lösung das
Hauptprogramm überwachen und nur dies neu starten. Ich habe nur keine
Idee wie? Der Timer läuft sauber weiter. Hier könnte ich also
eingreifen. Nur wie kann ich ohne WDT eine Endlosschleife resetten?

Danke für Ideen.

Gruß Binnesmann
#65936
Lesenswert?

Das "Killen" bringt dir doch keinerlei Information.

Wenn der Timerinterrupt noch geht, dann könntest Du dort z.B. über die
UART die Adresse aus dem Stack ausgeben, wo der Timerinterrupt das
hängende Programm gerade unterbrochen hat. Das dürfte wesentlich mehr
helfen.


Ansonsten:
"Killen" tut man bei MCs mit "Jump 0000" (Soft-Reset).
Aber beim 8051 erst, nachdem alle Interrupts mit "RETI" beendet
wurden.

Alle anderen "Killversuche" erzeugen nur Mist im Stack- und
Datenbereich.


Peter
Gast #65937
Lesenswert?

Hallo Peter,

ich habe da glaube ich die beste Möglichkeit zum debuggen vor lauter
Bäumen nicht gesehen. So'n sch... . Passiert immer wenn man ohne zu
denken was machen und sich dann so verstrickt das nachher die absolute
Blockade einsetzt.

Werde da erstmal ansetzen und schauen wie ich dem Fehler Herr werde.

Mit Deinem Tip habe ich sogar noch einen anderen Fehler gefunden. Der
DPTR wird in meinen IRQ Routienen noch expliziet in den Stack
geschoben. Das fällt ja flach. Oder brauche ich das hier doch?

Gruß Binnesmann

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren