Geschwindigkeitsoptimierung durch inline-Assembler?

OP #921831
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
OP
Sorry, blöd von mir, voll vergessen...
Also es handelt sich bei beiden um globale Varibalen, als extern 
deklariert, beide vom Typ int16_t.

Sorry für die vergessene Angabe, so kann man das ja echt nicht 
beantworten...

Es ist ein Atmega128, Programmiersprache C mit AVR-GCC...
Gast
Besser als 4 Zyklen geht's für Variablen im RAM nicht: Zweimal ein
Byte laden und zweimal ein Byte speichern. Bei mir wird der gleiche
Code erzeugt, wenn die Variablen volatile sind.
Gast
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
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
>>Q2_1 = Q1_1;
>>Q1_1 = Q0_1;

der Code und die Variablenbezeichnungen  lassen ja darauf schließen, 
dass Du da irgendwelche Daten 'durchschiebst'. Solche hacks gehen besser 
und schneller wenn man nicht die Daten bewegt sondern über Zeiger auf 
sie zugreift.

Cheers
Detlef

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.