Forum: Mikrocontroller und Digitale Elektronik Assembler-Befehle als Datenspeicher


von 006 (Gast)


Lesenswert?

Hi, ich suche eine Methode um möglichst schnell Daten Byteweise am Port 
eines Atmega Controllers (Atmega8/16/32/64/1280/2560) auszugeben. 
Gleichzeitig soll der Flash als Datenspeicher dienen.

Folgende Überlegung:
Statt mit Zeitverlust auf Variablen im Flash oder RAM zuzugreifen 
schreiben ich den c-Befehl:
1
PORTB=0b11110000;

Ich habe also Ausgabebefehl und Datenspeicherung in einer Zeile. Wie 
sieht das ganze in Assembler aus?
1
ldi r16, 0xF0
2
out PORTB, r16

Gibt es in Assembler auch einen Befehl wie in C oder ist dies die 
schnellste Umsetzung des genannten C-Befehls?

Kennt jemand eine schnellere Methode, um mit einem ATmega ein Byte an 
den Port zu bringen?

mfg, 006

von Karol B. (johnpatcher)


Lesenswert?

006 schrieb:
> Wie
> sieht das ganze in Assembler aus?

Du weißt aber schon, dass dein o.g. "C-Befehl" letztendlich auch in 
Assembler "umgeformt" wird. Das Listing kann man sich ansehen. Ein 
einzelner Befehl in C, kann durchaus in mehreren Assembler Instruktionen 
enden.

006 schrieb:
> Kennt jemand eine schnellere Methode, um mit einem ATmega ein Byte an
> den Port zu bringen?

Wenn das nicht reicht, würde es mich interessieren was genau du machst. 
Selbst mit Hardware (SPI & Co.) wird das Ganze kaum schneller gehen.

Mit freundlichen Grüßen,
Karol Babioch

von hobbychemiker (Gast)


Lesenswert?

Ja,

out PORTx,Rx

von 006 (Gast)


Lesenswert?

Hi

Karol Babioch schrieb:
> Du weißt aber schon, dass dein o.g. "C-Befehl" letztendlich auch in
> Assembler "umgeformt" wird

Ja logisch. Aber in welche Befehle? Die angegebenen?

Karol Babioch schrieb:
> Wenn das nicht reicht, würde es mich interessieren was genau du machst.

Ist nur eine Theoretische Überlegung, welche Datenraten ein Atmega in 
der Ausgabe schaffen kann.

von der alte Hanns (Gast)


Lesenswert?

out PORT,rn
benötigt einen Takt. Schneller geht es nicht.
Und rn muss vorher geladen werden:
ldi rn,const
Auch ein Takt.
Man kann also einen Konstantenblock mit maximal dem halben Systemtakt 
ausgeben.

von spess53 (Gast)


Lesenswert?

Hi

>Ja logisch. Aber in welche Befehle? Die angegebenen?

Kommt auf den Controller und dann auch auf den Port an. Manchmal ist 
statt des out Portx, Rn au8ch ein sts Portx, Rn notwendig.

MfG Spess

von c-hater (Gast)


Lesenswert?

006 schrieb:

> Gibt es in Assembler auch einen Befehl wie in C oder ist dies die
> schnellste Umsetzung des genannten C-Befehls?

Es ist die schnellste.

> Kennt jemand eine schnellere Methode, um mit einem ATmega ein Byte an
> den Port zu bringen?

Noch schneller geht nur, wenn man die Zahl der verschiedenen Werte für 
die Ausgabe auf 32 begrenzen kann.

Der Trick ist dabei einfach, die 32 verfügbaren Register mit eben diesen 
32 Werten vorzuladen und dann während der eigentlichen Ausgabe immer nur 
"out Port,Register" zu machen.

Das ist dann aber wirklich das endgültige Ende der Fahnenstange, mehr 
als eine Ausgabe pro Takt geht nun wirklich absolut nicht.

von OO7 (Gast)


Lesenswert?

006 schrieb:
> Ja logisch. Aber in welche Befehle? Die angegebenen?

Guck im Listfile nach was der Compiler deiner Wahl draus macht.

von der alte Hanns (Gast)


Lesenswert?

>endgültige Ende der Fahnenstange

Vielleicht mit Zen versuchen:

An ancient master said, “At the top of a hundred foot pole, advance one 
step further.”

von Thomas K. (thomas_k39)


Lesenswert?

Oder wie der Manager sagte:

Letztes Jahr standen wir vor dem Abgrund. Dieses Jahr haben wir einen 
grossen Schritt vorwärts gemacht.

von spontan (Gast)


Lesenswert?

Falscher Ansatz??

Nimm die Anforderung, setz dann eine Sicherheitsmarge drauf.
Such Dir einen schnellen Prozessor. Einen wirklich schnellen. Keine 
Krückenkonstrucktion.

von Falk B. (falk)


Lesenswert?

Die Weisheit aus dem fernen Osten.

http://elm-chan.org/docs/avr/avrdma_e.html

von San L. (zwillingsfreunde)


Lesenswert?

spontan schrieb:
> Falscher Ansatz??
>
> Nimm die Anforderung, setz dann eine Sicherheitsmarge drauf.
> Such Dir einen schnellen Prozessor. Einen wirklich schnellen. Keine
> Krückenkonstrucktion.

Einmal den Tread komplett durchlesen und deine Antwort hätte sich 
erübrigt. TO Schrieb:

006 schrieb:
> Ist nur eine Theoretische Überlegung, welche Datenraten ein Atmega in
> der Ausgabe schaffen kann.

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.