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