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