我在C编程方面很新颖,我正在为我的MCU开发固件应用程序。当我使用KEIL编译器(Big Endian)时,此方法工作正常,但当我切换到SDCC编译器(Little Endian)时,它无法正常工作。有人可以请解释我在做什么错?使用SDCC(Little Endian)编译器时,这种算法有什么问题?
目标器件是基于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是无符号整数。 在我的调试器中,出于某种原因,如果我在if语句行中设置了一个断点,则此函数的第一个入口MotorSteps = 00,所以t也应该赋值为0,但调试器显示t = 0.031497 (十进制)。如果我将调试器切换为以十六进制显示,t = 0x3d010300。这就像t永远不会被分配...
这将有助于知道什么MotorSteps和SetSpeedHz看起来像。 – 2010-03-03 19:41:35
这也有助于查看MotorSpeed的声明。 – semaj 2010-03-03 19:46:49
代码中没有任何东西依赖于endian。那么,问题是什么? – AnT 2010-03-03 19:50:25