Was macht ein µC mit unbekannten Befehlen

Gast #344722
Lesenswert?
• ▲
▼
Hallo Leute!

Ich habe mal eine Frage:
Wenn man einen µC mit internem Flash verwendet, dann ist dieses Flash
am Anfang leer und in jeder Zelle steht der Hexadezimalwert 0xFF.

Wenn man nun in diesem leeren Zustand Spannung anlegt, läuft dann der
Kontroller (Z.B. 8-Bit-AVR) mit seinem Programmcounter, Flashzelle für
Flashzelle weiter oder bleibt er schon auf Adresse 0 stehen?
Also mit anderen Worten, was passiert im Kontroller, wenn das Flash
leer ist und Spannung angelegt wird?
Dies würde mich einfach interessieren.

Danke für eure Antworten.

Gruß, Martin
Gast #344725
Lesenswert?
• ▲
▼
Wenn es den Befehl wirklich gibt würde ich von der Logik her sagen
"NOP". Ich hoffe ich schreibe jetzt hier keinen Blösinn.

Ich habe jetzt hier ein ATMEGA128-Datenblatt.
Es werden zwar am Schluss die einzelnen Befehle beschrieben, aber deren
HEX-Code ist nicht angegeben.

Gibt es hierfür ein spezielles Datenblatt?

Gruß, Martin
#344730
Lesenswert?
• ▲
▼
Ist eber eine interesannte Frage.

Es gibt nämlich keinen Opcode 0xFFFF
(zumindest hab ich im Instruction set manual nichts
gefunden.

Das beste war noch:

SBRS - Skip if Bit in Register is Set

OpCode
   1111 111r rrrr 0bbb

Der 0-er da vor der Bitnummer passt nicht. ansonsten
wäre es ein
   SBRS 31, 7

Die Frage ist dann allerdings: was macht die CPU
wirklich?
Gast #344731
Lesenswert?
• ▲
▼
Danke Johnny.m!

Habs schon gefunden.
Der NOP-Befehl schlägt mit: 0000 0000 0000 0000 zu Buche.
Ich kann leider keinen Befehl mit 1111 1111 1111 1111 finden.

Ich schau mir die Befehle nochmals durch.

Gruß, Martin
Gast #344733
Lesenswert?
• ▲
▼
Hallo,

alle nicht definierten Op-Codes sind "illegale" OP-Codes (Z80- und
6510-Programmierer werden sich erinnern... ;-)).
Was genau passiert, hängt von Befehlsdekoder ab, es passiert
normalerweise durchaus etwas wiederholbares, das Ergebnis ist oft
einfach nutzlos.

Einfach mal $FFFF als OP-Code Programmieren, mit einem IRQ-Trick dafür
sorgen, daß genau dieser eine Befehl abgearbeitet wird und in der
IRQ-Routine alle Registerwerte ausgeben lassen und sehen, was
passiert...
Könnte durchaus z.B. ein IN r0,PORTB + zusätzlichem Jump (Z)
rauskommen, aber nur wenn Z = 0 und C =1 ist oder so.

Gruß aus Berlin
Michael
Gast #344735
Lesenswert?
• ▲
▼
Der AVR läuft mit seinem Programmcounter einfach weiter, wenn er auf
$FFFF trifft. Das haben wir hier ausprobiert, indem wir das
Anwender-Flash komplett mit $FF beschrieben (also gelöscht) haben und
den Bootloader auf Adresse $0000 springen ließen. Der Prozessor fand
sich im Bootloader wieder, ohne das ein RESET-Flag im MCUSCR gesetzt
war - er muß also einfach durchgelaufen sein, bis er wieder auf den
Bootloader und somit gültigen Code getroffen war. Dieser Vorgang ist
100% reproduzierbar.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.