8 ビット MCU (8051 アーキテクチャ) を使用するデバイスのファームウェアに取り組んでいます。SDCC (Small Device C Compiler) を使用しています。私の回路が駆動しているステッピングモーターの速度を設定するために使用する関数があります。速度は、タイマーのリロード レジスタに目的の値をロードすることによって設定されます。モーターへの 1 秒あたりのパルス数を表す変数 MotorSpeed が 0 から 1200 の範囲にあります。MotorSpeed を正しい 16 ビット リロード値に変換する関数を以下に示します。浮動小数点演算がかなり遅いことは知っていますが、これを行うより高速な方法があるかどうか疑問に思っています...
void SetSpeed()
{
float t = MotorSpeed;
unsigned int j = 0;
t = 1/t ;
t = t / 0.000001;
j = MaxInt - t;
TMR3RL = j; // Set reload register for desired freq
return;
}