Forum: Mikrocontroller und Digitale Elektronik ARMv7 Byte Adressierung und alignment


von Markus (Gast)


Lesenswert?

Hallo zusammen

Schaue mir derzeit die etwas ältere ARMv7 Architektur genauer an. Nun 
ist mir aufgefallen, dass der Core Byte eigentlich auch Adressierung 
beherscht. Das heisst, er ist in der Lage auch ungerade Adressen im 
Speicher anzusprechen, ist dies korrekt? Oder bin ich da falsch 
gewickelt?

Die Frage geht dahin: Warum ist nun das alignment im Speicher bspw. 
einer Struktur trotzdem von Wichtigkeit?



Kann mir jemand Helfen beim Lösen des Knopfes...?

Vielen Dank!
Grüsse
Markus

von This is a required field (Gast)


Lesenswert?

>Schaue mir derzeit die etwas ältere ARMv7 Architektur

Was heisst "älter"? ARMv7 ist aktuell -> alle Cortexe.

>Das heisst, er ist in der Lage auch ungerade Adressen im
>Speicher anzusprechen, ist dies korrekt?

Wie sollte er sonst einzelne Bytes laden?
Oder denkst Du, dazwischen wären jeweils 3 Bytes heisse
Luft?

>alignment im Speicher bspw.
>einer Struktur trotzdem von Wichtigkeit?

Bei einzelnen Bytes gibt es kein "Alignment", nur relevant
bei Objekten grösser 1 Byte, wenn nicht-aligned müssen diese
evtl in mehreren Speicherzugriffen geladen werden, ist also langsamer.

--> ARMv7 Architecture Reference Manual.

von Markus (Gast)


Lesenswert?

This is a required field schrieb:
> Was heisst "älter"? ARMv7 ist aktuell -> alle Cortexe.

Ich muss mich präzisieren: Ich meine den ARM7TDMI, dies hat nichts mit 
den neuen Cortex zu tun. Dieser Core hat mittlerweile ausgedient, ist 
auf der offiziellen ARM Seite auch nicht mehr für neue Desgins 
empfohlen!


This is a required field schrieb:
> Wie sollte er sonst einzelne Bytes laden?
> Oder denkst Du, dazwischen wären jeweils 3 Bytes heisse
> Luft?

Nein, natürlich nicht! Man könnte ja auch bspw. Wortweise adressieren 
und einzelne Bytes rausmaskieren? Hat nichts mit heisser Luft zu tun!

This is a required field schrieb:
> Bei einzelnen Bytes gibt es kein "Alignment", nur relevant
> bei Objekten grösser 1 Byte, wenn nicht-aligned müssen diese
> evtl in mehreren Speicherzugriffen geladen werden, ist also langsamer.

Ja, das ist schon klar... und das Reference Manual hab ich selber auch 
gefunden!

von (prx) A. K. (prx)


Lesenswert?

Markus schrieb:

> Schaue mir derzeit die etwas ältere ARMv7 Architektur genauer an. Nun
> ist mir aufgefallen, dass der Core Byte eigentlich auch Adressierung
> beherscht. Das heisst, er ist in der Lage auch ungerade Adressen im
> Speicher anzusprechen, ist dies korrekt? Oder bin ich da falsch
> gewickelt?

Die diversen ARM Cores verhalten sich dabei recht verschieden. Man muss 
da also jeweils in die Dokumentation vom Core reinsehen um zu erfahren, 
was genau dabei passiert.

Alte Cores wie ARM2 bis mindestens ARM7TDMI ignorieren die unteren 2 
Bits beim Schreiben. Beim Laden rotieren sie die Daten anhand der 
Adresse. Der Unterschied zwischen Byte- und Word-Loads besteht da 
folglich nur in der Maskierung. Wenn man also ein falsch aligntes Wort 
läd, dann bekommt man das adressierte Byte in Bits 0-7 des Registers, 
und die übrigen Bits des adressierten Wortes entsprechend rotiert. 
Freilich ist das nicht unbedingt das, was man haben will.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3772.html

Bei ARMv7 hängt es auch vom exakten Core ab. Cortex-M0/M1 können es 
nicht, M3/M4 können es.

von Markus (Gast)


Lesenswert?

Danke A.K. für die Antwort. Hat mir weitergeholfen... :-)

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.