1

我在 UNIX 中有一个 C 代码,我需要让我的处理器在 2 秒内什么都不做。为此,我找到了汇编指令asm volatile("nop"::)。我已经搜索了很多,但我找不到任何地方解释如何计算必要的 NOP 数量以执行我的函数恰好 2 秒。谁能帮我?

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

2 回答 2

5

在大多数微处理器中,NOP 指令需要一个周期,因此计算如下:

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

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

于 2014-05-19T17:01:07.470 回答
1

只需包含 unistd.h 并使用:

unsigned int sleep(unsigned int seconds);
于 2014-05-19T17:02:27.337 回答