Zurücksetzen eines Pic18 aus C
Frage
Was ist der beste Weg, um eine Pic18 unter Verwendung von C-Code zurücksetzen Mit den HiTech Pic18 C-Compiler
Edit:
Ich bin mit currenlty
void reset()
{
#asm
reset
#endasm
}
aber es muss ein besserer Weg geben
Lösung
Es gibt eine FAQ hier .
F: Wie setze ich das Mikro
Eine Möglichkeit ist, alle Variablen zurückgesetzt die Standardwerte, wie sie in der PIC aufgelistet Handbuch. Dann Assembler-Sprache verwenden In dem Standort 0x0000 in der springen Mikro.
#asm LJMP 0x0000
#endasm
Das ist ganz sicher zu verwenden, auch wenn genannt innerhalb Interrupts oder Verfahren. Die PIC 16x Serie Micros 8 Stapelebene hat. Jedes Mal, wenn ein Verfahren genannt wird, eine Stapelebene wird für die Absenderadresse verwendet werden. Es ist ein Kreispuffer, so dass selbst wenn die Mikro 7 Verfahren Ebenen tief und in einem Interrupt, wenn ein Rücksetz ist genannt, ist dies der neue Anfang der Stapelpuffer und der Mikro Wille weiter wie normal.
Eine andere Möglichkeit ist es, den Watchdog einstellen Zeitgeber, wenn der Chip programmiert ist, und verwenden CLRWDT () alle Anweisungen durch der Code. Wenn Sie wollen das Mikro zurückgesetzt, stoppt die Watchdog-bit Rodung und das Mikro wird zurückgesetzt, nachdem um 18 ms bis 2 Sekunden auf der je Vorteiler.
Andere Tipps
Die Compiler haben in der Regel ihre eigene Reset () Funktion eingebaut, aber es tut genau das, was Ihre Funktion hat, und der eigentliche Name von Compiler zu Compiler variieren kann.
Sie tun es bereits die bestmögliche Art und Weise.
Ihre Antwort ist der beste Weg, den ich kenne. Der Schlüssel ist, dass Sie die Montageanleitung in einem Funktionsaufruf haben, ganz von allein. Der Compiler optimiert nicht eine Funktion, die Inline-Montage in sich hat, also wenn Sie den Reset-Befehl inline auf eine sehr große Funktion enthalten, wird der Compiler nicht in dieser Funktion eine der Code optimieren. Sie haben dies vermieden durch Zurücksetzen in seiner eigenen Funktion setzen. Der Code in dieser Funktion wird nicht optimiert werden, aber wen kümmert das, da es so eine kleine Funktion ist.
Es sei denn, es eine Bibliothek Funktion vom Compiler Anbieters Laufzeitbibliothek definiert ist (wenn eine solche lib existiert auch in den Mikrocontroller Welt ..., aber es sollte), dann nicht. C selbst wird sicherlich nicht helfen Sie heraus, „einen Reset“ tun, ist viel zu viel von einer plattformspezifischen Ausgabe für C zu bedecken.
Ich verwende den ccsinfo.com Compiler, der den PIC zum Zurücksetzen einen ähnlichen API-Aufruf hat, aber ich würde die Compiler-Lösung denken würde, das Richtige tun.