Forum: Compiler & IDEs mehrere Befehle Inline Assembler


von Robert P. (Firma: ---) (ausmilkel)


Lesenswert?

Hallo,

ich versuche grade in C ein paar Zeilen Assembler einzufügen. Dieser 
code sieht so aus
1
  __asm__ volatile (
2
  
3
      " loopanfang:  sbic 0x0C, 4 ;"         // clk_pin auf Zustand abfragen und nächsten Befehl überspringen, wenn Pin auf Low ist
4
      "              rjmp loop_anfang; "    // zu Schleifenanfang springen
5
      );

leider wird nur der erste Befehl ausgeführt (sbic ...), also die Abfrage 
des Pins. das rjmp wird nicht beachtet. habe es im AVR-Simulator und am 
Chip mittels debug getestet.
Auch bei diesem Quellcode-Stück wird nur der erste Befehl ausgeführt.
1
  __asm__ volatile (
2
      
3
        " sbi 0x0D, 5 ;"    // SW_DDR von clk auf 1
4
        " sbi 0x0E, 5 ;"    // SW_Port von clk auf 1
5
        );

Kann mir jemand bei der PRoblemlösung helfen? ich möchte halt gerne alle 
Befehle ausgeführt haben.

Gruß
Robert

von Matthias (Gast)


Lesenswert?

Also wenn ich mich recht erinnere, dann muss der Block so aussehen:

(Die 3. Zeile ist nur ein Beispiel, also !nicht! in der
realen Welt 1:1 ausführen)

[c]
_asm_ volatile
(
 " sbi 0x0D, 5 ;\n"\    // SW_DDR von clk auf 1
 " sbi 0x0E, 5 ;\n"\   // SW_Port von clk auf 1
 " sbi 0x0F, 5 ;\n"    // SW_Port von clk auf 1
);

[\c]

Hinter jede Zeile muss ein Backslash. Und in jeden String ein '\n'
Allerdings könnte die Syntax ein wenig Comilerabhängig sein.

von Matthias (Gast)


Lesenswert?

Man sollte natürlich das Wiki Zeugs ohne Backslash angeben ;-)
1
_asm_ volatile
2
(
3
 " sbi 0x0D, 5 ;\n"\    // SW_DDR von clk auf 1
4
 " sbi 0x0E, 5 ;\n"\   // SW_Port von clk auf 1
5
 " sbi 0x0F, 5 ;\n"    // SW_Port von clk auf 1
6
);

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


Lesenswert?

Der Backslash ist Kokolorus, aber das Semikolon beginnt einen
Assembler-Kommentar. =:->

von Robert P. (Firma: ---) (ausmilkel)


Lesenswert?

Jungs, danke für die schnelle Antwort !!!
klappt bestens. ICh wünsche euch ein schönes Wochenende

Gruß
Robert

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.