GCC编译器执行asm volatile(“nop”/::)指令需要多长时间?

时间:2014-05-19 16:53:35

标签: c gcc assembly timer nop

我在UNIX中有一个C代码,我需要让处理器在2秒钟内不做任何事情。 为了做到这一点,我发现汇编指令 asm volatile(“nop”::)。我搜索了很多,但我找不到任何地方解释如何计算必要的NOP数量才能执行我的功能2秒钟。任何人都可以帮助我吗?

for(i = 0; i < COUNTER; i++){
    asm volatile ("nop"::);
}

2 个答案:

答案 0 :(得分:5)

NOP指令在大多数微处理器中占用一个周期,所以算一算:

例如,在8 MHz处理器上,一个周期需要1/8 MHz = 125 ns。然后,您必须为循环的管理添加几个循环。

如果您所在的环境中有操作系统,则不应该依赖NOP指令等待几秒钟,也不应该使用主动等待。在POSIX系统(如UNIX)上,使用POSIX nanosleep函数。

答案 1 :(得分:1)

只包括unistd.h 并使用:

unsigned int sleep(unsigned int seconds);