mehrere Befehle Inline Assembler

OP (Firma: ---) #1313482
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
Gast #1313505
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.
Gast #1313508
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
);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren