Gast
#2037983
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"::);
}
|
Anzeige
|
asm volatile
Gast
#2037983
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"::);
}
Gast
#2037992
heiko_h schrieb: > asm volatile ("nop"::); einen Prozessortakt warten.
Gast
#2038004
Aber wozu ist das gut? Das heisst jedesmal wenn einmal die Schleife durchlaufen wird. Wartet er noch zusätzlich einen Prozessortakt.
Gast
#2038008
Damit soll verhindert werden, dass der Compiler die leere While-Schleife wegoptimiert. Ohne NOP wartet er evtl. garnicht, weil aus Sicht des Compilers überflüssig.
Gast
#2038023
Alles klar, danke für die Hilfe. Dann macht es auch einen Sinn.
Gast
#2038039
> 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 Peter Dannegger schrieb: > Das ist falsch! Stimmt, hatte vom dem Kram zu wenig gelesen. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|