Forum: Compiler & IDEs gcc inline Assembler (.)


von Panko (Gast)


Lesenswert?

Ich versuche mich in die Kryptik des inline Assemblers einzuarbeiten und 
bin dabei auf so etwas gestoßen:

asm volatile(
   ;irgendein code

   :"=&r"(...)
   :"b"(&gbl_array[42])
);


Ist bei dem Ausdruck (...) etwas, für Insider, triviales weggelassen 
worden, oder was bedeutet dieser Ausdruck?

von Panko (Gast)


Lesenswert?

Und meine zweite Frage für heute.

Sinn macht der Einsatz von inline asm ja am häufigsten für eine kleine 
Interrupt Routine.
Soweit ich weiß sichert der avr seine Register vor dem Interrupt und 
stellt sie danach wieder her. Muss ich, so ich das nicht möchte, weil 
nur ein Flag oder so gesetzt wird so etwas wie schreiben? Oder ist dafür 
anders vorzugehen
1
volatile uint8_t flg;
2
3
ISR(TIMER_OC_REG) __naked__
4
{
5
  asm volatile(
6
   
7
  );
8
}

allerbesten Dank!

von Hc Z. (mizch)


Lesenswert?

Für eine kleine (oder auch größere) Interrupt-Routine eignet sich am 
besten ein getrennter Assembler-Source (nicht inline, sondern direkt). 
Inline hat für eigenständige Rein-Assembler-Routinen eigentlich nur 
Nachteile, von der (Un)Übersichtlichkeit bis hin zu den clobbers.

Inline hat dann Vorteile, wenn Du Datenaustausch mit lokalen Variablen 
in der momentanen C-Funktion hast oder einen zur C-Funktion gehörigen 
Teil hast, der sich in Assembler besser ausdrücken lässt.

von Panko (Gast)


Lesenswert?

So habe ich das noch nicht gesehen. Scheint mir aber sinnvoll zu sein, 
den inline asm zu vermeiden - zumal ja für Beginner echt unleserlich 
ist.

Kann ich denn in einem c-Projekt eine xyz.S Datei editieren? Ich habe 
gerade versucht eine neue Source *.S anzulegen und das wird mir 
verboten. Lediglich *.c und *.h sind wohl toleriert.

von Panko (Gast)


Lesenswert?

Edit:
Oh weh ich bin wirr und scheine mich gerade etwas zu blamieren...
Ignoriert mich für heute ich frage ggf. morgen wieder etwas sinnvolles.

Und ich werde mich hier anmelden, um posts editieren zu können.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Panko schrieb:

> Scheint mir aber sinnvoll zu sein,
> den inline asm zu vermeiden - zumal ja für Beginner echt unleserlich
> ist.

(beginner [engl.] = Anfänger [dt.] :)

Naja, der ist insbesondere ein mächtiges Werkzeug für diejenigen, die
Bibliotheken pflegen und dabei möglichst gut auf die Details der
zu Grunde liegenden Maschine eingehen möchten.  Viele Dinge, die du
in der avr-libc findest, lassen sich nur auf diese Weise implementieren.
Der Vorteil ist dabei, dass eine inline asm-Anweisung dem Compiler so
viel an Informationen über ihre Bedürfnisse mitgeben kann, dass dieser
alles gut in den Optimierungsprozess einbinden kann.

> Kann ich denn in einem c-Projekt eine xyz.S Datei editieren?

Das musst du deinen Editor fragen, nicht uns und auch nicht den
Compiler. ;-)  Welchen Editor du benutzt, hast du uns nicht
verraten.  Ich kann dir verraten, dass es in meinem Editor kein
Problem ist, sowas zu machen, aber ich vermute, dass du nicht einen
Emacs benutzt. :)

von hugo (Gast)


Lesenswert?

panko schau mal hier:
http://www.rn-wissen.de/index.php/Inline-Assembler_in_avr-gcc

da wird bisschen darueber erzaehlt...

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.