Forum: Mikrocontroller und Digitale Elektronik ARMv7M vs. Cortx-M3


von Gästchen (Gast)


Lesenswert?

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!

von Gästchen (Gast)


Lesenswert?

Mist: meinte natürlich Cortex-M3 im Subject. Sorry.

von Frank K. (fchk)


Lesenswert?

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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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

von Gästchen (Gast)


Lesenswert?

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

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.