Befehlsadresse ab 0 oder 1?

OP (Firma: Dürkopp Fördertechnik) #5321942
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 ?
Gast #5321963
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
Gast #5321980
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.
Gast #5322047
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...
Moderator (Firma: Titel) Persönliche Seite #5322075
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren