Forum: Mikrocontroller und Digitale Elektronik asm volatile


von heiko_h (Gast)


Lesenswert?

Habe folgenden C-Code. Kann mir jemand sagen was das asm volatile 
("nop"::);
zu bedeuten hat?


// fallende Flanke an PD4 warten warten

while (!(PIND & (1 << PD4)) )
{
 asm volatile ("nop"::);
}

von Floh (Gast)


Lesenswert?

heiko_h schrieb:
> asm volatile ("nop"::);

einen Prozessortakt warten.

von heiko_h (Gast)


Lesenswert?

Aber wozu ist das gut? Das heisst jedesmal wenn einmal die Schleife 
durchlaufen wird. Wartet er noch zusätzlich einen Prozessortakt.

von Matze (Gast)


Lesenswert?

Damit soll verhindert werden, dass der Compiler die leere While-Schleife 
wegoptimiert.

von (prx) A. K. (prx)


Lesenswert?

Ohne NOP wartet er evtl. garnicht, weil aus Sicht des Compilers 
überflüssig.

von heiko_h (Gast)


Lesenswert?

Alles klar, danke für die Hilfe. Dann macht es auch einen Sinn.

von Experte (Gast)


Lesenswert?

> Damit soll verhindert werden, dass der Compiler die leere
> While-Schleife wegoptimiert.

Und:

> Ohne NOP wartet er evtl. garnicht, weil aus Sicht des Compilers
> überflüssig.

Ist natürlich, wie so vieles hier, falsch.

Da PIND selbst volatile deklariert ist, wird ein Compiler dieses 
While-Statement auch niemals weg optimieren.

von Peter D. (peda)


Lesenswert?

A. K. schrieb:
> Ohne NOP wartet er evtl. garnicht, weil aus Sicht des Compilers
> überflüssig.

Das ist falsch!
Ob er wartet, hängt nur davon ab, ob der Pin als volatile definiert ist.

Das NOP ist in der Tat völlig überflüssig.
Seine einzige Funktion besteht darin, daß man in die Loop einen 
Breakpoint setzen kann (im Debugger oder Simulator).


Peter

von (prx) A. K. (prx)


Lesenswert?

Peter Dannegger schrieb:

> Das ist falsch!

Stimmt, hatte vom dem Kram zu wenig gelesen.

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.