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"::); }
Aber wozu ist das gut? Das heisst jedesmal wenn einmal die Schleife durchlaufen wird. Wartet er noch zusätzlich einen Prozessortakt.
Damit soll verhindert werden, dass der Compiler die leere While-Schleife wegoptimiert.
> 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.
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
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.