Auf reset, was passiert im embedded system?
Ich habe eine Frage bezüglich der reset durch power up:
1.Ich weiß, dass mikrocontroller verdrahtet, zum starten von einer bestimmten Position im Speicher sagen 0000H einschalten. Bei 0000h, ob die interrupt-service-routine geschrieben für reset(Initialisierung des stack pointer und program counter etc.) oder die reset-Adresse gibt es bei 0000h(etwa 7000), so dass micro-controller, springt auf 7000-Adresse und dort die Initialisierung des stack und PC geschrieben wird.
2.Wer schreibt diese reset-service-routine? Ist es der Hersteller der mikrocontroller-chip(Intel oder Mikrochip etc) oder jeder Programmierer kann dies ändern, reset-service-routine(Zum Beispiel, Programmierer geändert den PC auf 4000h von 7000h auf power-up-reset, die in der ersten Instruktion geholt werden aus 4000 statt 7000).
3.wie der stack pointer und program counter initialisiert werden, um die jeweiligen inital-Adressen, wie Sie beim power up mikrocontroller nicht in den Stand zu setzen die Adresse in den stack pointer und program counter Register(es gibt keine Initialisierung durchgeführt, bis reset-service-routine).
- Was sollten die Schritte in der reset-routine unter Berücksichtigung aller Möglichkeiten?
Vielen Dank im Voraus
- sind Sie versuchen, einen bestimmten chip oder board? Sie können angeben, dass die chip-oder board?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bezug auf Ihre Nummerierung:
Den hardware-reset-Prozess ist Prozessor-abhängig und werden ausführlich beschrieben im Datenblatt oder Handbuch für das Teil, aber deine Beschreibung ist in der Regel der Fall - unterschiedliche Architekturen haben kann subtilen Variationen.
Während einige mikrocontroller umfassen eine ROM-basierte boot-loader enthalten können, start-up-code, in der Regel solche Bootloader sind nur für das laden von code über einen Kommunikations-port, entweder auf Programm-flash-Speicher direkt, oder das laden und ausführen eines sekundären bootloader in den RAM, dass dann Programme, die flash-Speicher. Soweit C-runtime-start-up geht, ist dies mit der compiler/toolchain, oder Sie schreiben es selbst in assembler. Normalerweise, selbst wenn start-up code wird vom compiler-Hersteller, geliefert wird es als Quelle montiert werden und in Verbindung mit Ihrer Anwendung. Die compiler-Hersteller können nicht immer wissen, Dinge wie memory-Karte, SDRAM-mapping-und timing-oder Prozessor-Taktrate oder was-Oszillator-Kristall verwendet wird, in Ihre hardware, so dass die start-up-code in der Regel müssen Anpassung oder Erweiterung durch Initialisierung stubs, die Sie implementieren müssen für Ihre hardware.
Auf ARM-Cortex-M-Geräte in der Tat der erste PC und stack-Zeiger sind in der Tat geladen von hardware, die Sie gespeichert sind, an die reset-Adresse geladen und auf power-up. Aber im Allgemeinen Fall hast du Recht, die reset-Adresse enthält entweder die start-up-code oder einen Vektor in den start-up code, auf pre-Cortex ARM-Architekturen, die reset-Adresse enthält tatsächlich eine jump-Anweisung eher als eine true vector-Adresse. So oder so, der start-up-code für eine C/C++ - Laufzeit müssen mindestens die Initialisierung des stack-pointer initialisieren Sie statische Daten, führen Sie alle erforderlichen C-Bibliothek Initialisierung und Sprung zu main(). Im Fall von C++ es muss führen Sie auch die Konstruktoren von globalen Objekten vor dem Aufruf von main().
Den Prozessor-Kerne haben in der Regel, wie Sie sagen, eine Startadresse für eine Art von Tabelle, die entweder eine Liste von Adressen, oder wie ARM ein Ort, wo Anweisungen ausgeführt werden. Umwickelt, der Kern aber innerhalb des Chips kann variieren. Kerne, die nicht speziell für den chip-Hersteller wie 8051, mips, arm, xscale, etc. haben ein viel breiteres Spektrum von unterschiedlichen Antworten. Einige mikrocontroller-Anbieter für Beispiel betrachten Gurt pins und wenn der Gurt über ein Kabel auf eine bestimmte Weise, wenn reset freigegeben wird, dann führt er Sie aus einem speziellen boot-flash im chip, einen bootloader, können Sie zum Beispiel verwenden, um das Programm den Benutzer boot-flash mit. Wenn der Riemen ist nicht gebunden, dass bestimmte Weg, dann ist es manchmal bootet Sie Ihren Benutzer-code. Einen Verkäufer kenne ich, immer noch hat Sie es starten Ihre bootloader-flash, wenn die Vektor-Tabelle muss eine gültige Prüfsumme dann springen Sie auf die reset-Vektor im Vektor-Tabelle, ansonsten sitzen Sie in Ihrer bootloader-Modus warten auf Sie, um mit Ihnen zu reden.
Wenn man in die größeren Prozessoren, nicht-mikrocontroller, wo software lebt außerhalb des Prozessors entweder auf ein boot-flash (separater chip vom Prozessor) oder ein ram, der irgendwie verwaltet vor dem reset, etc. Diese Folgen meist der Regel für den Kern, beginnen bei Adresse 0xFFFFFFF0 oder beginnen bei Adresse 0 x 00000000 ist, wenn es Müll gibt es, oh Feuer aus dem undefined instruction vector, wenn es das ist Müll gerade da hängen oder sitzen in einer Endlosschleife aufrufen die undefined instruction vector. dies funktioniert gut für einen ARM zum Beispiel bauen Sie ein Brett mit einer boot-flash, die gelöscht aus der Fabrik (alle 0xFFs) dann können Sie mit jtag zu stoppen, die arm-und Programm-flash die erste Zeit, und Sie haben nicht ablöten oder socket oder pre-Programm nichts. Solange dein bootloader nicht hängen Sie den arm Sie haben eine unbrickable design. (tatsächlich können Sie halten oft den arm auf reset und immer noch mit dem jtag-debugger und sich keine sorgen über schlechte code-messing mit jtag-pins oder die Aufhängung der arm-core).
Die kurze Antwort: Wie viele verschiedene Prozessor-chip-Herstellern gab es? Es gibt viele verschiedene Lösungen, so viele, wie Sie denken können und mehr bereitgestellt wurden. Platzieren Sie einen reset-handler-Adresse in einer bekannten Stelle im Speicher ist die häufigste, obwohl.
EDIT:
Fragen 2 und 3. wenn Sie den Kauf einer chip, einige mikrocontroller haben diese geschützten bootloader, aber auch mit, dass Sie normalerweise schreiben Sie den boot-code, der durch das Produkt. Und ein Teil der boot-code ist die Initialisierung des stack pointers und bereiten Speicher und bringen Teile des Chips und all diese guten Dinge. Manchmal chip-Anbieter bieten Beispiele. wenn Sie den Kauf eines board-level-Produkt, dann oft finden Sie ein board-support-package (BSP), das hat Beispiel-code, um das board und vielleicht ein paar Dinge tun. Sagen das beagleboard zum Beispiel oder die open-rd oder embeddedarm.com kommen Sie mit einem bootloader (u-boot oder andere) und einige haben bereits linux vorinstalliert. boards wie, dass der Benutzer in der Regel nur schreibt einige linux-Anwendungen/Treiber und fügt Sie zum bsp, aber Sie sind nicht darauf beschränkt, Sie sind oft willkommen, um völlig neu zu schreiben und ersetzen den bootloader. Und wer schreibt den bootloader, um den setup-stacks und bringen Sie die hardware, usw.
Systemen wie dem gameboy advance oder nds oder die wie, der Verkäufer hat einige startup-code, ruft Sie Ihren Start-code. so können Sie die Stapel-und Z-setup für Sie, aber Sie reichte aus, um Sie, so viel von dem system können Sie nur bekommen, um zu entscheiden, wie die Scheibe bis die memorires, wo Sie wollen, dass Ihr stack, Daten, Programme, etc.
einige Anbieter behalten wollen dieses Zeug kontrolliert oder ein Geheimnis, das andere nicht. in einigen Fällen können Sie am Ende mit einem board oder chip mit kein Beispiel-code, um nur einige Datenblätter und Referenz-Handbücher.
wenn Sie möchten, zu bekommen in diesem Geschäft, aber Sie müssen bereit sein, dies zu schreiben, startup-code (in assembler), der kann rufen Sie C-code, um den rest des Systems, dann könnte das start-up, das Haupt-Betriebssystem oder Anwendung oder was auch immer. Microcotrollers klingt wie, was Sie spielen mit, die Antworten auf Ihre Fragen sind in der chip-Anbieter-Nutzer-guides, einige Anbieter sind besser als andere. die Suche nach dem Wort reset oder Booten in das Dokument, um zu versuchen, um herauszufinden, was Ihre boot-Schemas sind. Ich empfehle, verwenden Sie "dollar votes" zu wählen, der bessere Anbieter. Ein Anbieter mit schlechten docs, geheime Dokumente, schlechter support, nicht geben Sie Ihr Geld, verbringen Sie Ihr Geld auf Anbieter mit frei zugänglicher, gut geschrieben docs, mit gut geschriebenen Beispiele und oder user-Foren mit Vollzeit-Mitarbeiter trolling rund um die Beantwortung von Fragen. Es gibt Zeiten, in denen die Dokumente sind nicht verfügbar, außer auf schweren, zahlende Kunden, es kommt auf den Markt. die meisten Allzweck-embedded-Systeme aber sind offen dokumentiert. die Qualität variiert stark, aber die docs, etc sind vorhanden.
Kommt auf den controller/embedded system, das Sie verwenden. Die, die ich verwendet habe, in die Spiele-Entwicklung haben die IP-Punkt für Punkt-Startadresse im RAM. Der boot-strap-code aus der mitgelieferten compiler initialisiert static/const-Speicher, setzt den stack-pointer, und dann springt die Ausführung zu einer main () - routine von einer Art sein. Ältere Systeme auch begonnen, an einer festen Adresse, aber Sie manuell musste sich die Stapel, beginnend Vektor-Tabelle, und andere Sachen in assembler. Einen gemeinsamen Namen für die Start-assembler-Datei CRT0.s für die Sachen, die ich getan habe.
Also 1. Sind Sie richtig. Der Mikroprozessor hat zu Beginn auf einige Feste Adresse.
2. Die ISR kann durch den Hersteller geliefert werden oder compiler Schöpfer, oder Sie können selbst einen schreiben, abhängig von der Komplexität des Systems in Frage.
3. Der stack und die ersten Programmierer Zähler sind in der Regel direkt über eine Art bootstrap-routine, die ziemlich oft überschrieben werden können mit Ihrem eigenen code. Siehe oben.
Zuletzt: Die Schritte hängen von der chip. Wenn es eine Unterbrechung der Stromversorgung jeglicher Art, RAM kann werden verschlüsselt und alle ISR-Vektor-Tabellen-und startup-code sollte neu geschrieben werden, und die app ausgeführt werden soll, als wenn es einfach nur eingeschaltet ist. Aber, Lesen Sie Ihre Unterlagen! Ich bin sicher, dass es Plattform-spezifische Sachen gibt, die die Antwort auf diese für Ihren konkreten Fall.