【发布时间】:2015-06-24 10:05:23
【问题描述】:
在编写 asm 代码时,有一个技巧可以通过告诉 cpu 显式跳转到下一条指令来将代码减慢一两个周期。我正在考虑使用 C++ 模板做类似的事情。这是我的代码:
template <unsigned int c>
inline void adelay()
{
goto x;
x:
adelay<c-1>();
}
template <>
inline void adelay<0>()
{
}
虽然这个想法看起来很合理,但优化器似乎通过删除 jmp 代码来阻碍。任何想法如何实现?
背景
想要这样做的原因是为了减慢微控制器的代码,使其以非常特定的频率输出光束脉冲。这是一种非常专业的用途,除了在低级硬件访问(如编写驱动程序或编程微控制器)中不常见。即便如此,我也会尽可能地避免此类事情。不幸的是,这总是无法避免的。
【问题讨论】:
-
您为什么要这样做?几乎可以肯定,任何像这样基于代码的减速都是错误的做法。
-
我希望我遇到了试图减慢代码速度的问题
-
根据编译器的不同,您可以将 asm 直接放入 C++,(至少使用 Visual C++)
-
我正在编写一个微控制器。
-
是的,不高兴地尝试了 asm 路线。
标签: c++ templates optimization g++