Hallo, kämpfe gerade mit einer simplen Sache - Komme aber nicht auf eine Lösung. Ich möchte aus der Software einen Reset erzwingen ohne einen Portpin dafür zu Opfern. Jetzt habe ich mir gedacht, der WDT läuft. Den kann ich dazu missbrauchen. Jetzt habe ich nur das Prob, das selbst wenn ich den Prescaler änder, bzw. den Zähler schon auf FFh setze, der WDT den Pic erst wieder beim normalen nächsten Auslösen Resetet. Denke ich zu kurz - oder zu weit? Ich möchte einfah nicht ca. 1,5 sek. warten, weil ich ja nicht weiß wie lange der Zähler schon läuft. Danke Binnesmann
Den Zähler kannst Du aus der Software heraus nicht ändern, da der WDT völlig unabhängig vom Rest des PIC´s arbeitet. Warum springst Du nicht einfach an den Programmstart (goto 0x00)? Steffen
Hallo, ich bin mir da nicht sicher wie tief ich im "Dschungel" des Stacks stecke. Um alles wieder jungfräulich zu haben, dachte ich mir, das dieser Weg wohl der beste und einfachste wäre. Gruß Binnesmann
Wenn das Programm sauber geschrieben ist, dann sollte es doch irgendwo eine MainLoop geben. Dort könnte man dann ein Flag auswerten, welches irgendwo im Unterprogramm gesetzt wird, und dann auf 00 springen. Der Stack sollte dann eigentlich lehr sein. Steffen
Gar nicht so dumm.... Wie gesagt war gestern schon spät und nach 2 Stunden vor so einem Problem sieht man den Wald vor Bäumen nicht. Danke Binnesmann
Springe einfach nach 0000, der Stack interessiert nicht. Hat die CPU einen Hardwarestack (z.B. PIC), so ist es egal, wo der steht, man kann unendlich viel CALLen. Und eben nur die letzten 2 (8) bleiben erhalten, d.h. von dort kanns auch wieder RETurn gehen. Und CPUs mit Softwarestack (z.B. AVR) müssen diesen eh initialisieren. Peter
@Peter Das ist zwar so richtig, es ist aber nicht gerade die saubere Art der Programmierung. Ich würde mich jedenfalls nicht darauf verlassen, das es immer funktioniert. Steffen
Zumindest lt. Datenblatt ist es so. Ist ja auch sinnvoll. Wenn schon ein Hardwarestack, d.h. kein Softwarezugriff möglich, dann sollte er auch quasi selbstreparierend sein. Ich vermute mal, der wird beim Reset garnicht auf Null gesetzt, sondern steht einfach irgendwo. Peter
Auf jeden Fall wird dann die Emulation nicht funktionieren, da z.B. beim ICE2000 (jedenfalls bei einigen Prozessormodulen) der Stack nicht als echter Ringpuffer integriert ist. Der nimmt auch mal 10 Werte auf. Er meldet sich zwar, das der Stack übergelaufen ist aber wenn man die Meldung abschaltet ... Gar nicht mal so schlecht wenn man dann eine Stacktiefe von 10 oder mehr zur Verfügung hat. Nur im Zielsystem mit Prozessor sieht´s dann nicht so gut aus :-(. Wie gesagt, auf solche Sachen würde ich lieber verzichten und etwas "sauberer" programmieren. Steffen
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.