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?
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!
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.
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.
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.
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. :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.