我需要在我的 n 个 CPU 周期(~30)的代码中添加延迟。我目前的解决方案是下面的解决方案,它有效但不是很优雅。
此外,延迟必须在编译时知道。我可以使用它,但如果我可以在运行时更改延迟,那将是理想的。(如果有一些开销也没关系,但我需要 1 个周期的分辨率。)
我没有任何可以使用的外围计时器,所以它需要是一个软件解决方案。
do_something();
#define NUMBER_OF_NOPS (SOME_DELAY + 3)
#include "nops.h"
#undef NUMBER_OF_NOPS
do_the_next_thing();
nops.h:
#if NUMBER_OF_NOPS > 0
__ASM volatile ("nop");
#endif
#if NUMBER_OF_NOPS > 1
__ASM volatile ("nop");
#endif
#if NUMBER_OF_NOPS > 2
__ASM volatile ("nop");
#endif
...