Assembler in C auf dem AVR eingebunden

Gast #2375067
Lesenswert?
• ▲
▼
Hey,

kann mir jemand sagen was hier getrieben wird:

static inline void _delayFourCycles(unsigned int __count)
{
    if ( __count == 0 )
        _asm_ __volatile__( "rjmp 1f\n 1:" );    // 2 cycles
    else
        _asm__ __volatile_ (
          "1: sbiw %0,1" "\n\t"
          "brne 1b"                              // 4 cycles/loop
          : "=w" (__count)
          : "0" (__count)
         );
}

Also es wird Assembler eingebunden, ist klar.

Wenn ich jetzt dem delay eine 0 übergebe, wird etwas anderes ausgeführt, 
ich schätze das rjmp fürt direkt zum Rücksprung aus der Funktion, aber 
warum macht man das? könnte man nicht auch direkt return dort hin 
schreiben?

Wofür steht das volatile in dem Fall? damit die Zählerrei nicht 
wegoptimiert wird? ist das gleichzusetzen mit dem Volatile bei einer 
Variablendeklaration in C?

Ich mache viel in C auf dem AVR, ich wäre jedoch dankbar wenn mir auch 
jemand den Codeschnipsel:

(
          "1: sbiw %0,1" "\n\t"
          "brne 1b"                              // 4 cycles/loop
          : "=w" (__count)
          : "0" (__count)
         );


erläutern würde:-) Vor allem:

_asm_ (""); Scheint ja die "Hülle" zu Assemblerangaben zu sein, aber 
was machen die Doppelpunkte und die Variable in Klammern dort? Vor allem 
was ist "=w" für ein Ausdruck, sieht nicht nach ASM aus, oder?

Gruß,
M

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.