Forum: Mikrocontroller und Digitale Elektronik ARM Cortex M3 Befehle 16 Bit ?


von Sascha (Gast)


Lesenswert?

Erfahrungsaustauch:

Hallo, ich beschäftige mich seit 3 Tagen mit dem Cortex-M3 von ST 
(STM32Fxxx). Und gehe alle Assembler Befehle durch.

Zu wenig 16 Bit Befehle, die meisten Befehle sind 32 Bit breit im ROM 
(80%).
Was macht da ARM nur für eine Werbung ???

Oder taugt der IAR Assembler nichts ???

Da kann ich die Werbung von ARM für den Cortex M3 nicht nachvollziehen.
Sollte doch so toll 16 Bit Speed und Density optimiert sein !?!

Der C-Compiler macht mit den Befehlen ein regelrechtes Pusselspiel, 
damit er 16 Bit breite Befehle zum Einsatz bringen kann.

Und dann die bedingungen nur im IT-Block, das schafft ja auch einen 
Overhead ???

Oder ist Derjenige der ARM-Mode (32bit) handcodiert und den Core 
verstanden hat doch im Vorteil ? (ARM7TDMI)

Gut der Cortex-M3 hat noch ein paar nützliche Befehle hinzu bekommen, 
vor allem für DSP Lösungen. (Die ich in anspruch nehme...)

Für eure Erfahrung wäre ich dankbar.

Gruß Sascha

PS. hat jemand eine Opcode Tabelle, woran man die Zusammensetzung der 
Befehle sowie der Zyklen sehen kann ?

von (prx) A. K. (prx)


Lesenswert?

Sascha schrieb:

> Zu wenig 16 Bit Befehle, die meisten Befehle sind 32 Bit breit im ROM
> (80%).

Der ursprüngliche Thumb Befehlssatz ist fast vollständig in 16 Bits 
codiert. Nur die Erweiterungen von Thumb2 sind in 32 Bits codiert. Und 
das sind sie, weil man in 16 Bits nun einmal nur 16 Bits unterbringen 
kann.

> Oder taugt der IAR Assembler nichts ???

Ich kenne den IAR Assembler nicht, aber es gibt eine Spezifikation von 
ARM, welcher Befehl wie aussieht und wie man im Befehl selbst durch 
Suffix die Codierung auswählen kann. Wenn man natürlich Operanden 
hinschreibt, die in 16 Bits nicht codierbar sind, dann kann der 
Assembler auch keine Wunder vollbringen.

> Und dann die bedingungen nur im IT-Block, das schafft ja auch einen
> Overhead ???

ARM hat 4 Bits pro Befehl dafür reserviert, die in vielen Befehlen 
effektiv leer blieben. Thumb2 verwendet statt dessen einen 
Präfix-Befehl. Wenn du es schaffst, in einem in 16 Bit codierten 
Befehlssatz einen saubere Predication unterzubringen ohne Platz zu 
verschwenden, dann lass dir das schnell patentieren.

Cortex M3 ist die m.W. einzige teilweise in 16 Bits codierte 
Architektur, die so eine flexible Predication überhaupt kennt.

> Oder ist Derjenige der ARM-Mode (32bit) handcodiert und den Core
> verstanden hat doch im Vorteil ? (ARM7TDMI)

Jemand der den Core und den Befehlssatz mit einer Codierung verstanden 
hat ist immer demjenigen gegenüber im Vorteil, der dies nicht verstanden 
hat ;-).

> PS. hat jemand eine Opcode Tabelle, woran man die Zusammensetzung der
> Befehle sowie der Zyklen sehen kann ?

Auf arm.com findet sich eine Referenz sowohl der Cortex M3 Architektur 
generell als auch des in den STM32 verwendeten Cores (V1.1).

von (prx) A. K. (prx)


Lesenswert?

Sascha schrieb:

> Der C-Compiler macht mit den Befehlen ein regelrechtes Pusselspiel,
> damit er 16 Bit breite Befehle zum Einsatz bringen kann.

Ein Compiler kann mit Befehlen der Form
   r1 = r2 <op> r3
mehr anfangen, als mit
   r1 = r1 <op> r2

Nun ist es allerdings einigermassen schwierig, in einem in 16 Bits 
codierten Befehl 3 Register zu je 4 Bits mitsamt Opcode für Dutzende 
Befehle unterzubringen.

Der Compiler hat also gelegentlich die Wahl zwischen weniger aber dafür 
länger codierten Befehlen mit kürzerer Laufzeit und mehr aber kompakter 
codierten Befehlen mit längerer Laufzeit.

Zudem macht es in der Codierung einen Unterschied, ob man in den 
Befehlen die Register R0-7 oder R8-12 verwendet.

von Sascha (Gast)


Lesenswert?

Hallo A.K.,
vielen Dank, dann vermute ich stark, das mir irgendwie noch eine 
Declaration für den IAR Assembler fehlt. Denn er will keine Thumb 16 Bit 
Befehle, so wie ich sie eigentlich kenne.
Ich habe schon einige DSP Lösungen im normalen ARM-Mode auf ARM7TDMI und 
ARM9 geschrieben, war nie ein Problem....
Sonst schreibe ich zur Zeit auf R32C ist O.K. hat FPU.

Ich habe leider noch keine Anleitung oder App.Node von IAR zu ihrem 
Assembler für Cortex-M3 gefunden. (es wird da überhaupt nicht darauf 
eingegangen).

Habe nur gelesen, dass der normale Thumb Code auf Cortex-M3 direkt 
laufen sollte ?

Oder Welche Softwareumgebung ist für Cortex-M3 ideal ?

Zumindest bin ich fürs erste mal erleichtert, weil der STM32Fxxx ein 
Prozessor meiner 1.Wahl werden soll.

Gruß Sascha

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Sascha schrieb:
> Und dann die bedingungen nur im IT-Block, das schafft ja auch einen
> Overhead ???

ARM cores beherrschen seit einigen Jahren "instruction folding". Das 
bedeutet, dass Instruktionen bereits vor der Ausführung aus der Pipeline 
entfernt werden können und somit keine Ausführungszeit benötigen. Beim 
Cortex-M3 ist das beispielsweise die IT Instruktion. Andere ARM cores 
falten vorhergesagte Sprünge, NOP etc. Besonders bei NOPs kann das für 
den gemeinen Microcontroller Anwender etwas unerwartet sein, weshalb man 
das explizit für Cortex-Mx untersagt hat.

Gruß
Marcus
http://www.doulos.com/arm/

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.