Ich bin neugierig zu wissen, gibt es Unterschiede zwischen den Montageanleitungen von ARM-MCUs von zwei verschiedenen Unternehmen? Zum Beispiel zwischen einem Cortex-M3/4 von NXP und TI oder ST oder anderen Konzernen.
Einige meiner Freunde sagen mir, dass sie keinen Unterschied haben. Ist das korrekt?
Ich denke, das Richtige ist, dass für eine bestimmte Architektur, wie die ARMv7-M-Architektur des Cortex-M3-Kerns, der Befehlssatz für alle Prozessoren gleich ist. Das Verhalten einiger Befehle kann jedoch aufgrund der implementierungsdefinierten (dh optionalen) Funktionalität im Prozessor variieren. Anweisungen, die versuchen, auf optionale Fähigkeiten zuzugreifen, die in einem bestimmten Prozessor nicht implementiert sind, können Ausnahmen verursachen.
Um die Features zu finden, die für die Implementierung definiert werden können, suchen Sie im entsprechenden ARM-Architektur-Referenzhandbuch nach IMPLEMENTATION, in Großbuchstaben.
Prozessoren innerhalb derselben Familie (z. B. Cortex M3) sollten dieselben Anweisungen haben, aber verschiedene Familien haben unterschiedliche Anweisungen. Der ursprüngliche ARM verwendete einen Satz von 32-Bit-Anweisungen, dann erschien eine Version, die zwischen dem „ARM“-Modus und dem „Thumb“-Modus wechseln konnte, wobei letzterer einen kleineren Satz von 16-Bit-Anweisungen implementierte. Ein Job, der noch einmal halb so viele Thumb-Befehle benötigt wie ARM-Befehle, dauert im Thumb-Modus noch einmal ungefähr halb so lange wie im ARM-Modus, passt aber in 3/4 des Platzes.
Viele neuere Prozessoren haben keinen 32-Bit-Modus, aber einige können zwei aufeinanderfolgende Befehlswörter so kombinieren, dass sie die meisten Befehle aus dem 32-Bit-ARM-Befehlssatz und einige mehr liefern. Beachten Sie, dass einige 32-Bit-ARM-Befehle nicht implementiert sind. Der Nettoeffekt ist, dass es keinen Prozessor gibt, der jeden ARM-Befehl ausführen kann; Unterschiedliche ARM-Familien verfügen über unterschiedliche Befehlssätze.
Es gibt eine Reihe verschiedener Variationen des ARM-Befehlssatzes ( Einzelheiten siehe http://en.wikipedia.org/wiki/ARM_architecture ), und die Teile verschiedener Anbieter unterstützen möglicherweise unterschiedliche Teilsätze.
Nur als Beispiel gibt es in ARMv6 keine Integer-Divisionsanweisung; es ist in einigen Versionen von ARMv7 optional, in anderen obligatorisch; und in ARMv8 vorhanden.
Darüber hinaus kann ein Anbieter, der seine eigene ARM-lizenzierte CPU herstellt, im Prinzip alle Anweisungen hinzufügen oder entfernen, die ihm wichtig sind.
Ignacio Vazquez-Abrams
Joe Hass
Roh
Ignacio Vazquez-Abrams
Jippie
JYelton