私は C プログラミングが初めてで、MCU のファームウェア アプリケーションに取り組んでいます。この方法は、KEIL コンパイラ (ビッグ エンディアン) を使用していたときは正常に機能していましたが、SDCC コンパイラ (リトル エンディアン) に切り替えたときに正しく機能しません。誰かが私が間違っていることを説明できますか???
ターゲット デバイスは、8051 アーキテクチャに基づく Silicon Labs C8051F320 です。
unsigned **int** MotorSteps = 0; //"Global" variables
unsigned **int** MotorSpeed = 0;
bit RampUp()
{
float t = 0;
t = MotorSteps;
if ( t < 51 )
{
t = (1-((50 - t)/50))*15;
t = (t * t);
MotorSpeed = 100 + t;
return 0;
}
else return 1;
}
追加: まず、MotorSteps と MotorSpeed をunsigned int に変更しました。 私のデバッガーでは、何らかの理由で、この関数 MotorSteps = 00 の最初の入り口で、if ステートメント行にブレークポイントを設定すると、t も 0 に割り当てられるはずですが、デバッガーは t=0.031497 (10 進数) を示します。 )。デバッガーを 16 進数で表示するように切り替えると、t = 0x3d010300 になります。t が割り当てられないようです...