在编写 asm 代码时,有一个技巧可以通过告诉 cpu 显式跳转到下一条指令来将代码减慢一两个周期。我正在考虑使用 C++ 模板做类似的事情。这是我的代码:
template <unsigned int c>
inline void adelay()
{
goto x;
x:
adelay<c-1>();
}
template <>
inline void adelay<0>()
{
}
尽管这个想法看起来很合理,但优化器似乎通过删除 jmp 代码来阻碍。任何想法如何实施?
背景
想要这样做的原因是减慢微控制器的代码,使其以非常特定的频率输出光束脉冲。这是一个非常专业的用途,除了低级硬件访问(例如编写驱动程序或编程微控制器)之外并不常见。即便如此,我也会尽可能地避免此类事情。不幸的是,这不能总是避免。