asmコードを作成する場合、CPUに次の命令に明示的にジャンプするように指示することにより、コードを1〜2サイクル遅くするトリックがあります。私はC++テンプレートを使用して同様のことをすることを考えていました。これが私のコードです:
template <unsigned int c>
inline void adelay()
{
goto x;
x:
adelay<c-1>();
}
template <>
inline void adelay<0>()
{
}
アイデアは正しいように見えますが、オプティマイザーはjmpコードを削除することで邪魔をしているようです。これをどのように実装できるかについてのアイデアはありますか?
バックグラウンド
これを実行する理由は、マイクロコントローラーのコードを遅くして、非常に特定の周波数で光ビームパルスを出力するようにするためです。これは非常に特殊な使用法であり、ドライバーの作成やマイクロコントローラーのプログラミングなどの低レベルのハードウェアアクセスを除いて一般的ではありません。それでも、可能な限りそのようなことは避けようとしています。残念ながら、これは常に回避できるとは限りません。