Geschwindigkeitsoptimierung durch inline-Assembler?

OP #921831
Lesenswert?

Moin,

ich probiere gerade den Code in einer ISR kurz zu bekommen. U.a. steht 
da folgendes:
1
Q2_1 = Q1_1;
2
Q1_1 = Q0_1;
Wenn ich im Debugger da durchgehe, sehe ich, dass er für den ersten 
Befehl 12, und für den zweiten sogar 16 Takte benötigt.
Die Variablen sind global und volatile. Nehme ich das volatile weg, so 
braucht er nur noch 4 Take pro Befehl. Aber geht das mit 
inline-Assembler noch schneller? Oder wie würde da der Code für 
aussehen?

MfG, und vielen Dank, Ozzy
Gast #921875
Lesenswert?

Nachtrag zu meinem vorigen Post:

Für einen kompletten 16-Bit-RAM-RAM-Tranfer werden sogar 8 Zyklen
benötigt. Wenn dein Programm es in 4 Zyklen schafft, bedeutet das
wahrscheinlich, dass Q1_1 und Q0_1 auf Grund vorheriger Operationen
bereits in Registern liegen.
OP #922018
Lesenswert?

Stimmt, ich habe mir gerade mal die lss-Datei angesehen, da sieht man, 
dass er das doch schon vorher geladen hat.

Aber vielleicht könnt Ihr mir ja noch etwas bei dem Inline-Assmbler 
helfen, denn damit komme ich gar nicht klar...

Was muss ich denn z.B. schreiben, wenn ich das SREG-Register sichern 
möchte? So?: asm("in %0, %1" : "=r30" : "=0x3f" );

MfG, und vielen Dank, Ozzy

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren