Forum: Mikrocontroller und Digitale Elektronik Befehlsadresse ab 0 oder 1?


von Jannis D. (Firma: Dürkopp Fördertechnik) (jexpert19)


Lesenswert?

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 ?

von bitwurschtler (Gast)


Lesenswert?

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

von Leo (Gast)


Lesenswert?

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

von Volle22 (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Jannis D. (Firma: Dürkopp Fördertechnik) (jexpert19)


Lesenswert?

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
Noch kein Account? Hier anmelden.