Hallo Leute,
für mich sind die ARM-Befehlssätze irgend wie undurchsichtig.
In den offiziellen ARM-Unterlagen (ARM v7M-Ref.Manual) steht dazu,
soweit ich gesehen habe, auch nichts Konkretes, deshalb meine Fragen:
Ist es korrekt, dass die Cortex-M3-Architektur den vollen
ARM-v7M-Befehlssatz unterstützt (also alles, was im ARM-v7 manual
steht)? Irgend wo meine ich etwas von "Subset" gelesen zu haben.
Der Unterschied zwischen Thumb und Thumb2 (der von in der
Cortex-M3-Architektur implementiert ist) ist auch nirgends im Details
dargestellt.
Und wo genau ist die Verbindung zwischen ARMv7M und Thumb2?
Seltsam auch, dass in einem gas (GNU assembler, selbst übersetzt)
jeglicher Befehl mit Fehlermeldung abgewiesen wird (sinngemäß: ein
ARM-Befehl kann nicht in einem Thumb-Prozessor verwendet werden), wenn
.cpu cortex-m3, jedoch nicht .thumb angegeben wird. Nur beide im Gespann
funktionieren problemlos. Kann es sein, dass .cpu das Frontend des
Assemblers und .thumb das Backend steuert:
Fragen über Fragen. Wäre schön, wenn jemand ein paar klärende Worte dazu
schreiben könnte. Danke!
Gästchen schrieb:> Ist es korrekt, dass die Cortex-M3-Architektur den vollen> ARM-v7M-Befehlssatz unterstützt (also alles, was im ARM-v7 manual> steht)? Irgend wo meine ich etwas von "Subset" gelesen zu haben.
Wenn man die DSP-Erweiterungen des M4 nicht hinzuzählt, müsste das meine
ich stimmen.
> Der Unterschied zwischen Thumb und Thumb2 (der von in der> Cortex-M3-Architektur implementiert ist) ist auch nirgends im Details> dargestellt.
thumb ist der reine 16 Bit Code, den es bei ARM7-11 gibt.
> Und wo genau ist die Verbindung zwischen ARMv7M und Thumb2?
Erst ab v7 (nicht zu verwechseln mit ARM7 - dusslige Nomenklatur) gibts
thumb2, bis v6 gabs nur arm und thumb(1)
> Seltsam auch, dass in einem gas (GNU assembler, selbst übersetzt)> jeglicher Befehl mit Fehlermeldung abgewiesen wird (sinngemäß: ein> ARM-Befehl kann nicht in einem Thumb-Prozessor verwendet werden), wenn> .cpu cortex-m3, jedoch nicht .thumb angegeben wird. Nur beide im Gespann> funktionieren problemlos. Kann es sein, dass .cpu das Frontend des> Assemblers und .thumb das Backend steuert:
Beim Cortex ist bit 0 bei einem branch immer gesetzt, was heißt, dass im
thumb-Modus nach dem branch weitergemacht werden soll. Da der Cortex den
arm Modus nicht mehr hat, gibts anderenfalls (ohne .thumb ist .arm
aktiv) eine exception zur Laufzeit bzw einen error zur Compilezeit.
fchk
Gästchen schrieb:> Ist es korrekt, dass die Cortex-M3-Architektur den vollen> ARM-v7M-Befehlssatz unterstützt (also alles, was im ARM-v7 manual> steht)? Irgend wo meine ich etwas von "Subset" gelesen zu haben.
Da wir gerade beim Haarespalten sind: Cortex-M3 ist Implementierung
einer Architektur, und nicht selbst eine.
In jeder ARM Architektur sind einige Eigenschaften als
implementation defined spezifiziert. Es kann sein, dass C-M3 die
eine oder andere Eigenschaft tatsächlich nicht vollständig
unterstützt, da müsste ich aber selbst nachsehen. Kann aber nichts
wichtiges sein :-)
Die ARMv7E-M Erweiterungen (DSP und FP) sind nur im Cortex-M4
enthalten.
> Der Unterschied zwischen Thumb und Thumb2 (der von in der> Cortex-M3-Architektur implementiert ist) ist auch nirgends im> Details dargestellt.
Thumb ist ein (fast) reiner 16bit Befehlssatz. Bei Thumb2 hat man
diesen strengen RISC Ansatz zugunsten der Flexibilität etwas
aufgeweicht und eine Reihe zusätzlicher Befehle, die aus zwei
Halbworten bestehen, definiert. Alle Thumb Befehle haben die gleiche
Codierung in Thumb2.
> Und wo genau ist die Verbindung zwischen ARMv7M und Thumb2?
Diese Architektur unterstützt nur Thumb2 (und nicht den historischen
32 bit ARM Befehlssatz).
--
Marcus
Frank K. schrieb:> Erst ab v7 (nicht zu verwechseln mit ARM7 - dusslige Nomenklatur) gibts> thumb2, bis v6 gabs nur arm und thumb(1)
Thumb2 wurde mit dem ARM1156 (ARMv6T2) eingeführt.
--
Marcus
>> Und wo genau ist die Verbindung zwischen ARMv7M und Thumb2?>>Diese Architektur unterstützt nur Thumb2 (und nicht den historischen>32 bit ARM Befehlssatz).
Zuerst mal vielen Dank an alle für die schnellen Antworten.
So langsam gibt's ein wenig Licht im Dunkel:
So wie ich das jetzt insgesamt verstanden habe, ist ARMv7M eine
Architektur, und der Cortex-M3 implementiert diese Architektur. Also
sind im CM3 alle Befehle (außer FP, DSP), die im ARMv7 RM beschrieben
sind, implementiert.
Das thumb2 sowohl 16- als auch 32-Bit-Befehle untertützt, sieht man ja
im ARMv7 RM. Und wie ich jetzt die manuals und Antworten hier verstanden
habe, implementiert der CM3 den thumb2-Befehlssatz.
Der letzte Knoten ist nun, wie ich den Begriff thumb2 einzuordnen habe.
Aaah, ich glaube, jetzt hab' ich's:
ARMv7M ist eine Prozessorarchitektur, genauer ein Prozessorcore. Die
ARMv7M-Architektur verwendet den thumb2-Befehlssatz. Und der CM3
schließlich ist eine "Inkarnation", also eine in HW gegossene
ARMv7M-Implementierung.
Dennoch verwirren die verschiedenen Statements in den manuals. Geht das
nur mir so?