www.mikrocontroller.net

Forum: Compiler & IDEs gcc inline Assembler (.)


Autor: Panko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Panko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
volatile uint8_t flg;

ISR(TIMER_OC_REG) __naked__
{
  asm volatile(
   
  );
}

allerbesten Dank!

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Panko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Panko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. :)

Autor: hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
panko schau mal hier:
http://www.rn-wissen.de/index.php/Inline-Assembler...

da wird bisschen darueber erzaehlt...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.