Hallo zusammen, Ich habe mal eine grundlegende Frage zu Mikrocontrollern, unzwar wie ist das mit den befehlen gelöst, fängt der erste befehl bei Befehlsadresse 0 oder 1 an? Wenn der erste befehl bein 0 wäre, wäre doch auch ein leerer Speicher voll mit Befehlen (dem erstem Befehl). So wäre der Controller die ganze Zeit beschäftigt obwohl der Speicher leer ist. Würde mich freuen wenn mir einer weiterhelfen kann helfen. Danke im voraus ?
Jannis D. schrieb: > Hallo zusammen, > Ich habe mal eine grundlegende Frage zu Mikrocontrollern, unzwar wie ist > das mit den befehlen gelöst, fängt der erste befehl bei Befehlsadresse 0 > oder 1 an? Kommt darauf an, ich meine beim MC68000 lag der Resetvector auf der 0x0004 http://research.cs.tamu.edu/prism/lectures/mbsd/mbsd_l9.pdf beim Z80 dagegen auf der 0x000
Hallo Jannis, die Befehlsspeicher (meist Flash) von Mikrocontrollern beginnen alle bei Adresse 0x0. Wenn noch kein Programm auf den Mikrocontroller übertragen wurde, dann steht im gesammten Speicher entweder 0x00 oder 0xFF, je nach Controller-Typ. Im Fall von ATmega steht überall nop (No Operation) was 0x0 entspricht. https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_NOP.html Ich hoffe das beantwortet deine Frage. Ansonsten arbeite einfach mal die Tutorials auf dieser Seite durch, falls dich das Thema Mikrocontroller genauer interessiert. https://www.mikrocontroller.net/articles/Kategorie:AVR Gruß Leo
Leo schrieb: > die Befehlsspeicher (meist Flash) von Mikrocontrollern beginnen alle bei > Adresse 0x0. Bei den aller wenigsten beginnt der Befehlsspeicher bei 0x00000000 bei vielen hat man sogar eine Auswahl an Adressen. Ja ein zufällig gefüllter Speicher enthält auch Befehle bei deren Abarbeitung wird man aber schnell auf etwas kommen das kein gültiger Befehl ist das erzeugt dann einen "illegal Opcode" Trapp. Gute System prüfen die Angebliche Software zuvor und führen nicht ein das auch was man ihnen programmiert hat.
Leo schrieb: > die Befehlsspeicher (meist Flash) von Mikrocontrollern beginnen alle bei > Adresse 0x0. Doppel-Unsinn. Erstens stimmt es nichtmal annähernd und zweitens bedeutet nichtmal die Tatsache, dass der Befehlsspeicher an irgendeiner Stelle (z.B. 0) beginnt, dass nach einem Reset auch ab dieser Adresse tatsächlich die Abarbeitung der Befehle beginnt. Das stimmt nichtmal beim Atmega, denn bei dem beginnt der Flash zwar wirklich bei 0, aber der typische Atmega kann an fünf verschiedenen Stellen mit der Code-Abarbeitung beginnen, je nach Fuses. Und nur eine davon ist wirklich 0... > Wenn noch kein Programm auf den Mikrocontroller übertragen > wurde, dann steht im gesammten Speicher entweder 0x00 oder 0xFF, je > nach Controller-Typ. Das stimmt wenigstens. > Im Fall von ATmega steht überall nop (No Operation) was > 0x0 entspricht. Das schon wieder nicht mehr. Beim Atmega steht natürlich 0xff auf jungfräulichem Flash. Und das entspricht nicht nop, sondern einem undokumentierten Befehl, der deutlich was anderes tut als nop. Insbesondere dauert er doppelt so lange wie ein nop... > Ich hoffe das beantwortet deine Frage. Wenn überhaupt, dann weit überwiegend falsch... ------------------------------------------ Was der TO vermutlich eigentlich wissen wollte: Außer in irgendwelchen Schlafmodi oder im Reset macht eine MCU immer irgendetwas. Dabei spielt es keine Rolle, ob sie dabei von Adresse 0 oder 1 oder sonst irgendeiner Adresse beginnt, was da steht, wird ausgeführt und wenn es der größte Schwachsinn ist. Naja, bei einigen Controllern werden immerhin illegale Opcodes abgefangen. Was allerdings nicht sehr viel nützt, solange der entsprechende Trap-Vektor und -Handler auch nur Müll enthält...
c-hater schrieb: > Was der TO vermutlich eigentlich wissen wollte: Auch ein Maschinencode mit 0x00 tut irgendwas. Im einfachsten Fall ist es ein NOP, was bedeutet, dass.der Programmzeiger einfach gerade aus durch den "leeren" Speicher läuft. Übrigens ist ein Flash voller 0xff frisch gelöscht und damit "leer". Da wäre es dann geschickter, wenn ein NOP den Maschinencode 0xff hätte... ? Ein NOP ist in der Regel dann auch kein "No Operation", sondern eigentlich ein "Increment Program Counter", denn der PC wird ja verändert.
:
Bearbeitet durch Moderator
Danke für die zahlreichen ausfürlichen Antworten, haben mir alle sehr weiter geholfen und meine Frage ist damit auch beantwortet ?
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.