Forum: Mikrocontroller und Digitale Elektronik AVR I/O-Befehle (in/out): wozu?


von working directory (Gast)


Lesenswert?

In den letzten Tagen beschäftige ich mich mit AVR-Mikrocontrollern. Um 
genau zu sein habe ich hier einen Atmega328p. Nun sagt dessen Datenblatt 
(in 8.5, I/O Memory, S.20), dass der Zugriff auf den gesamten 
I/O-Adressraum mit den Load- bzw. Store-Befehlen möglich ist. Zusätzlich 
kann eine Untermenge davon mit den I/O-spezifischen Befehlen IN und OUT 
angesprochen werden. Die Bit-Instruktionen lasse ich jetzt mal außen 
vor.

Nun frage ich mich, wenn ich doch alles auch mit 'normalen' 
Load-/Store-Befehlen machen kann, warum den Befehlssatz mit 'special 
case' I/O-Befehlen verschandeln? Da ich mal davon ausgehe, dass die 
Atmel-Engineers schon einen Grund dafür gehabt haben, war mein erster 
Tipp, dass der I/O-Zugriff mittels Load/Store bei früheren/anderen 
AVR-Prozessoren vielleicht nicht möglich war und die In-/Out-Befehle 
daher im Befehlssatz vorhanden sind.

In der Tat scheint das Instruction Set Manual das zu bestätigen:
> For parts with SRAM, the data space consists of the Register File, I/O
> memory and internal SRAM (and external SRAM if applicable).  For parts
> without SRAM, the data space consists of the Register File only.
(aus der Befehlsbeschreibung für LD, S.87)

Demnach nehme ich an, dass die I/O-Befehle auf AVR-Controllern ohne SRAM 
benötigt werden. Was mich jedoch verwundert, ist die Tatsache, dass 
diese Befehle auch vom Compiler (avr-gcc) generiert werden. Kein 
Compilerentwickler würde sich die Unterstützung der ausgiebigen Nutzung 
von irgendwelchen Spezialbefehlen antun, wenn diese keinen Vorteil 
brächten.

Google ist leider nicht sonderlich hilfreich. Eine zufriedenstellende 
Antwort konnte ich so nicht finden, nur tonnenweise Tutorials und 
nutzlose Forenbeiträge. Vielleicht kann die Frage ja einer der 
AVR-erfahrenen Leute hier beantworten.

von working directory (Gast)


Lesenswert?

Oh, anscheinend habe ich was eigentlich offensichtliches übersehen: die 
Anzahl der zur Abarbeitung nötigen Takte. Hier unterscheiden sich die 
beiden Befehlsklassen (1 vs. 2 Takte). Ok, das ist ja schonmal was. 
Gibts weitere Unterschiede?

von Dr. Sommer (Gast)


Lesenswert?

working directory schrieb:
> Nun frage ich mich, wenn ich doch alles auch mit 'normalen'
> Load-/Store-Befehlen machen kann, warum den Befehlssatz mit 'special
> case' I/O-Befehlen verschandeln?
Weil da der seperate address-lade-befehl entfällt und es somit für 
assembler-programmierer einfacher ist (AVR ist primär für Assembler 
gedacht)

von TriHexagon (Gast)


Lesenswert?

Nein nicht ganz, AVR ist für Hochsprachen optimiert worden, doch AVR 
sollte trotzdem einfach in Assembler zu programmieren sein. 8051 wurde 
für Assembler optimiert.

von (prx) A. K. (prx)


Lesenswert?

working directory schrieb:
> Gibts weitere Unterschiede?

Die Länge der Befehle: 1 Wort vs 2 Worte. Das dürfte auch der Grund für 
die unterschiedliche Laufzeit sein.

: Bearbeitet durch User
von working directory (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Weil da der seperate address-lade-befehl entfällt und es somit für
> assembler-programmierer einfacher ist (AVR ist primär für Assembler
> gedacht)

Hmm, gibt's dafür nicht den STS-Befehl der Form 'sts Konstante, 
Register'? Analog mit LDS. Aber ok, hier weist das ISM gleich daraufhin, 
dass die nicht auf allen MCUs existieren. Ich seh gerade, dass es sogar 
eine 16-Bit-Form von LDS/STS gibt, die eine 7-Bit-Adresse enthält und 
somit wie die I/O-Befehle auch nur einen Takt benötigt.

von spess53 (Gast)


Lesenswert?

Hi

>Weil da der seperate address-lade-befehl entfällt und es somit für
>assembler-programmierer einfacher ist ...

Welcher 'seperate address-lade-befehl'?

>(AVR ist primär für Assembler gedacht)

Das sieht Atmel aber anders:

http://www.atmel.com/Images/doc1497.pdf

MfG Spess

von (prx) A. K. (prx)


Lesenswert?

working directory schrieb:
> Ich seh gerade, dass es sogar
> eine 16-Bit-Form von LDS/STS gibt, die eine 7-Bit-Adresse enthält und
> somit wie die I/O-Befehle auch nur einen Takt benötigt.

Auf den Zwerg-AVRs mit erheblich reduziertem Befehls- und Registersatz 
und entsprechend kleinem Adressraum. ATtiny4 oder so.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Ok STS/LDS hab ich vergessen.

spess53 schrieb:
>>(AVR ist primär für Assembler gedacht)
>
> Das sieht Atmel aber anders:

Jaa. Deswegen hat AVR auch so tolle Offset-Adressierungen, 
Barrel-Shifter, einheitlichen Adressraum (für einfache Pointer), einen 
Adressraum dessen Pointer in ein Register passen, etc... Die behaupten 
ja auch:
> Optimized to speed time-to-market, they [AVR] are based on the industry's
> most code-efficient architecture for C and assembly programming. No other
> microcontrollers deliver more computing performance with better power
> efficiency.

von (prx) A. K. (prx)


Lesenswert?

Dr. Sommer schrieb:
> Jaa. Deswegen hat AVR auch so tolle Offset-Adressierungen,
> Barrel-Shifter, einheitlichen Adressraum (für einfache Pointer), einen
> Adressraum dessen Pointer in ein Register passen, etc...

Nu bleibt auf dem Teppich. AVR stammt aus den 90ern. Nenn ein paar 
Architekturen dieser Zeit, die deinen Wünschen entsprach, und die in der 
Chipfläche vergleichbar zu AVR war. Heute zieht dieses Argument nicht 
mehr so recht, aber damals waren die Chipstrukturen etwas grösser als 
heute.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

A. K. schrieb:
> Nu bleibt auf dem Teppich. AVR stammt aus den 90ern.
Ist ja schön, aber Atmel behauptet das jetzt, und jetzt gibt es da 
schon andere Kandidaten...

von (prx) A. K. (prx)


Lesenswert?

Dr. Sommer schrieb:
> Ist ja schön, aber Atmel behauptet das jetzt, und jetzt gibt es da
> schon andere Kandidaten...

Na was sollen die denn sagen? Leute kauft nicht bei uns, kauft bei der 
Konkurrenz? Sowas wie "most code-efficient architecture for C" ist 
natürlich Quark, aber so redet man im Marketing eben.

: Bearbeitet durch User
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.