Kann mir jemand sagen, was bei einem Reset in einem Mikrocontroller abläuft? Danke Gruß Alex
Tom schrieb: > Kann mir jemand sagen, was bei einem Reset in einem > Mikrocontroller > abläuft? Alle werden auf den Reset-Wert gesetzt, den man in Datenblatt findet, darunter auch der Programmcounter zum Reset Vector. Tom schrieb: > Was für mich auch noch interssiert, was danach dann abläuft. Der µC arbeitet das Programm von vorne ab.
:
Bearbeitet durch User
Tom schrieb: > Kann mir jemand sagen, was bei einem Reset in einem Mikrocontroller > abläuft? Dasselbe wie beim Einschalten. Alle Register auf Anfangswerte, RAM wird nicht geändert. If MCU Status Register ist vorhanden, wird entsprechendes Reset Flag gesetzt.
Was genau passiert, steht im Handbuch des betreffenden Mikrocontrollers. Im Wesentlichen kann man davon ausgehen, dass dasselbe passiert wie wenn man den Strom zum ersten Mal anschaltet. Alle Subsysteme werden resettet, und die Reset-ISR wird ausgeführt.
Marc Vesely schrieb: > Dasselbe wie beim Einschalten. Nicht ganz. Bei den AVRs bleibt der Watchdog, sofern aktiviert, eingeschaltet. Auch wenn der Reset über den Pin ausgelöst wurde. Wenn man dann gemütlich seine Initialisierung durchführt, womöglich noch mit Display, wo ja gewöhnlich Delays drin sind und danach erst den Watchdog bedient, kommt man manchmal gar nicht soweit. Denn natürlich läuft der Watchdog nach Reset mit der kürzesten Zeit. Ähnlich verhält es sich mit der WD-Fuse. Wenn die abgeschaltet wird, ist das auch erst nach Power-On-Reset wirksam. mfg.
Thomas Eckmann schrieb: > Bei den AVRs bleibt der Watchdog, sofern aktiviert, eingeschaltet. Auch > wenn der Reset über den Pin ausgelöst wurde. Wenn man dann gemütlich > seine Initialisierung durchführt, womöglich noch mit Display, wo ja Warum sollte jemand, der mit WD arbeitet, zuerst die Initialisierung machen und erst danach MCUSR auf Status prüfen ? Wie schon oben erwähnt, steht alles in MCUSR, also sollte man gemütlich die MCUSR prüfen und dann seine Initialisierung durchführen. Von mir aus auch gemütlich.
Marc Vesely schrieb: > Warum sollte jemand, der mit WD arbeitet, zuerst die Initialisierung > machen und erst danach MCUSR auf Status prüfen ? Das weiss ich nicht. Und das ist mir auch vollkommen egal. Aber darum geht es auch gar nicht, sondern darum, dass das Verhalten je nach Art des Resets eben nicht dasselbe ist. mfg.
Marc Vesely schrieb: > Alle Register auf Anfangswerte, RAM wird nicht geändert. Das ist in dieser allgemeinen Form falsch. Zumindest bei ARM7/9-Prozessoren werden die meisten Register bei einem Reset eben nicht zurückgesetzt, sondern nur R15 (=PC) und CPSR. Das ist sehr praktisch beim Debuggen, insbesondere bei Verwendung eines Prozessors mit Hardwarewatchdog. > If MCU Status Register ist vorhanden, wird entsprechendes Reset Flag > gesetzt. Es wäre mir neu, dass jeder Prozessor, der ein Statusregister besitzt, darin auch den Reset-Status ablegt.
Unterschiedliche Microcontroller und Mikroprozessoren arbeiten den Reset unterschiedlich ab! Das genaue Verhalten lässt sich nur dem Datenblatt des jeweiligen Bausteines entnehmen. Programmtechnisch holen sich manche Prozessoren erst den Reset-Vektor (eine Programmadresse) aus dem ROM und beginnen dann die Ausführung des Programmes an dieser Stelle.
Thomas Eckmann schrieb: > Nicht ganz. Andreas Schweigstill schrieb: > Das ist in dieser allgemeinen Form falsch. Zumindest bei > ARM7/9-Prozessoren werden die meisten Register bei einem Reset eben > nicht zurückgesetzt, sondern nur R15 (=PC) und CPSR. Das ist sehr Eric B. schrieb: > Sogar das stimmt nicht mal für alle uC. Also, in etwas allgemeiner Form: Es kann alles mögliche passieren, muss aber nicht. Hoffe, dir mit dieser Antwort genausoviel geholfen zu haben wie die 3 Experten oben.
Marc Vesely schrieb: > Es kann alles mögliche passieren, muss aber nicht. Nein. Es passiert nicht alles Mögliche, sondern etwas genau definiertes. Was das genau ist, steht im Datenblatt. mfg.
:
Bearbeitet durch User
Thomas Eckmann schrieb: > Nein. Es passiert nicht alles Mögliche, sondern etwas genau definiertes. > Was das genau ist, steht im Datenblatt. Und selbst das stimmt nur bei Mikroprozessoren/-controllern, bei denen der Reset sauber einsynchronisiert ist. Mir ist mindestens ein Baustein bekannt, bei dem dies bei einigen Peripherieblöcke vergessen wurden. Im schlimmsten Fall erzeugte solch ein Block sogar einen nicht zurücksetzbaren Dauerinterrupt. Dann half nur der Stromreset. :-/ Nachdem ich damals auch noch andere ähnlich gravierende Mängel zusammengetragen und an den Hersteller berichtet hatte, strich er zunächst Leistungsmerkmale aus dem Datenblatt. Als in der nächsten Maske immer noch üble Fehler enthalten waren, stellte er die Produktion ganz ein, löste die zuständige Entwicklungsabteilung auf und lies den Nachfolgebaustein an einem anderen Unternehmensstandort fertigentwickeln. Bei dem Hersteller handelt es sich übrigens um einen der großen "Global Player".
Thomas Eckmann schrieb: > Nein. Es passiert nicht alles Mögliche, sondern etwas genau definiertes. Ok wenn du darunter auch verstehst, dass nichts passiert - es werden keineswegs immer alle Register mit einem bestimmten Wert initialisiert, oft sind zahlreiche Register nach Power on unbestimmt und nach Reset unverändert. Du hast natürlich Recht, auch das ist was genau definiertes, nämlich nichts, und das steht auch im Datenblatt. M.a.W. wenn im Datenblatt der Zustand nach Reset drin steht, dann ist das so, bei anderen Registern muss der Programmierer selbst dafür sorgen, dass sie definiert initialisiert werden, sofern er sie überhaupt verwendet. Für den Ablauf wichtige Register wie Programmzähler oder Interrupt Control werden natürlich immer definiert resettet, sonst könnte der Prozessor nicht funktionieren. Aber schon auf die Baudrate des UARTs kann man sich nicht verlassen ohne nachzusehen. Georg
Eins der wichtigen Dinge die nach einem Reset oft zu Problemen führt ist die Tatsache das ein Grundzustand hergestellt wird der im Datenblatt nicht immer leicht zu erkennen ist. So z.B. das alle E/A-Ports auf Eingabe setzt werden und extern Hardware/iCs statt einem Ausgangspegel einen offenen Eingang sehen( http://www.ichaus.de/wp1_mikrocontroller). In den Programmroutinen ist es auch recht nützlich sich zu überlegen welche Zustand nach dem Reset da ist und wenn das Datenblatt nicht eindeutig ist muss das Programm den erforderlichen Startzustand herstellen.
Ich würde hier mal ein konkretes Beispiel heranziehen wollen. Wie ist es denn z.B. beim ATmega 8-32? Im Datenblatt sollte ja dann dort alles dokumentiert sein, oder? Gruß Tom
Thomas Eckmann schrieb: > Marc Vesely schrieb: >> Es kann alles mögliche passieren, muss aber nicht. > > Nein. Es passiert nicht alles Mögliche, sondern etwas genau definiertes. Schön wie ihr aneinander vorbei redet. Natürlich ist für jeden einzelnen µC genau definiert, was beim Reset passiert. Und das steht natürlich im Datenblatt. Aber wenn man zwei verschiedene µC vergleicht (und der TE wollte sich ja bis eben nicht festlegen, welcher µC ihn interessiert) dann können das natürlich verschiedene Dinge sein. Eine übergreifende Aussage, die für alle µC zutrifft, kann man deswegen nicht machen.
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.