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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jannis D. (Firma: Dürkopp Fördertechnik) (jexpert19)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die zahlreichen ausfürlichen Antworten, haben mir alle sehr 
weiter geholfen und meine Frage ist damit auch beantwortet ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.