Herbert schrieb:
> hab ich mir grad angeschaut - was ist hier eigentlich der Unterschied
> genau zu den STR911? Cortex sind strom-sparsamer, aber aus welchem Grund
> sind diese schneller in der Abarbeitung von normalen Code?
Der Befehlssatz von ARM7/9 und Thumb(1) kann Konstanten zunächst
unbekannten Wertes (z.B. Adressen) praktisch nur PC-relativ laden, also
typischerweise aus dem Flash. Mit Cache oder entsprechenden Puffern ist
das weniger kritisch, aber wenn jedem solchen Ladebefehl unweigerlich 5
Waitstates auf den Buckel geschnallt werden (STR9@96:5, SAM7@55:1), dann
macht sich das bemerkbar. Diese Ladebefehle sind in normalem ARM Code
ziemlich häufig und sind einer der Gründe, weshalb beim ARM7 Code im RAM
erheblich schneller sein kann.
Mit dem Thumb2 Befehlssatz ist das anders. Da lassen sich 32bit
Konstanten wie bei vielen anderen RISCs in 2 Hälften ohne Datenzugriff
auf das Flash laden. Braucht etwas mehr Platz (8 Bytes statt 6), wird
aber nicht durch Waitstates ausgebremst. Bei NXP kommt von Anfang an
noch eine Pufferung von Code- und Datenzugriffen auf das Flash hinzu,
die beim LPC1700 schon an einen kleinen Cache erinnert. Die
entsprechenden Puffer vom STR9 beziehen sich jedoch nur auf Code, dort
fehlt jegliche Pufferung von Datenzugriffen auf das Flash.
Der STR9, jedenfalls in der mir vorliegenden ursprünglichen Version ohne
"A", hat wohl noch andere kleine gelegentlich bremsende Fiesheiten drin,
jedenfalls benimmt er sich bei bestimmten Performance-Tests teilweise
recht seltsam, bricht dann markant ein, während LPC2100 und STM32 sich
wie erwartet verhalten.
Dann gibt's bei den Grosshirnen natürlich noch die Division. Wenn man
die in der Anwendung oft brauchen sollte, dann kann das auch eine Rolle
spielen.