我用STM32F103VCT6写程序。
有一下一段代码:
void Window0_Wy(void)
{
char s[8],j,i=0;
float ShiftValue0; //位移值
switch(SP_Read.WyBdDs.Uint)
{
case 1:
if(Encoder.Uint<SP_Read.Encoder_Sample[0].Uint)
ShiftValue0=0.0;
else if(Encoder.Uint<SP_Read.Encoder_Sample[1].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[0].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float;
else
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[1].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float+(float)(SP_Read.WyBzz[0].Uint);
break;
case 2:
if(Encoder.Uint<SP_Read.Encoder_Sample[0].Uint)
ShiftValue0=0.0;
else if(Encoder.Uint<SP_Read.Encoder_Sample[1].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[0].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float;
else if(Encoder.Uint<SP_Read.Encoder_Sample[2].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[1].Uint)) * \
SP_Read.Encoder_Xsh1[1].Float+((float)SP_Read.WyBzz[0].Uint);
else
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[2].Uint)) * \
SP_Read.Encoder_Xsh1[1].Float+((float)SP_Read.WyBzz[1].Uint);
break;
case 3:
if(Encoder.Uint<SP_Read.Encoder_Sample[0].Uint)
ShiftValue0=0.0f;
else if(Encoder.Uint<SP_Read.Encoder_Sample[1].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[0].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float;
else if(Encoder.Uint<SP_Read.Encoder_Sample[2].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[1].Uint)) * \
SP_Read.Encoder_Xsh1[1].Float+((float)SP_Read.WyBzz[0].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[3].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[2].Uint)) * \
SP_Read.Encoder_Xsh1[2].Float+((float)SP_Read.WyBzz[1].Uint);
else
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[3].Uint)) * \
SP_Read.Encoder_Xsh1[2].Float+((float)SP_Read.WyBzz[2].Uint);
break;
case 4:
if(Encoder.Uint<SP_Read.Encoder_Sample[0].Uint)
ShiftValue0=0.0f;
else if(Encoder.Uint<SP_Read.Encoder_Sample[1].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[0].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float;
else if(Encoder.Uint<SP_Read.Encoder_Sample[2].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[1].Uint)) * \
SP_Read.Encoder_Xsh1[1].Float+((float)SP_Read.WyBzz[0].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[3].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[2].Uint)) * \
SP_Read.Encoder_Xsh1[2].Float+((float)SP_Read.WyBzz[1].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[4].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[3].Uint)) * \
SP_Read.Encoder_Xsh1[3].Float+((float)SP_Read.WyBzz[2].Uint);
else
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[4].Uint)) * \
SP_Read.Encoder_Xsh1[3].Float+((float)SP_Read.WyBzz[3].Uint);
break;
case 5:
if(Encoder.Uint<SP_Read.Encoder_Sample[0].Uint)
ShiftValue0=0.0f;
else if(Encoder.Uint<SP_Read.Encoder_Sample[1].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[0].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float;
else if(Encoder.Uint<SP_Read.Encoder_Sample[2].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[1].Uint)) * \
SP_Read.Encoder_Xsh1[1].Float+((float)SP_Read.WyBzz[0].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[3].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[2].Uint)) * \
SP_Read.Encoder_Xsh1[2].Float+((float)SP_Read.WyBzz[1].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[4].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[3].Uint)) * \
SP_Read.Encoder_Xsh1[3].Float+((float)SP_Read.WyBzz[2].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[5].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[4].Uint)) * \
SP_Read.Encoder_Xsh1[4].Float+((float)SP_Read.WyBzz[3].Uint);
else
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[5].Uint)) * \
SP_Read.Encoder_Xsh1[4].Float+((float)SP_Read.WyBzz[4].Uint);
break;
default :
break;
}
sprintf(s, "%-10.2f", ShiftValue0); //产生:" 123 4567"
for(j=0;j<6;j++)
{
if(s[j]==0x20)
s[j]=0;
else if(s[j]==0x2d)
s[j]=13;
else if(s[j]==0x2e)
{
s[j]=14;
i=j;
}
else
s[j]-=0x30;
}
for(j=0;j<=(i+2);j++)
{
dispchn4(196+j*6,40,&ALB_NUM[s[j]][0]);
}
for(j=(i+3);j<6;j++)
dispchn5(196+j*6,40);
}
这段代码会跑飞。
其中:
case 5:
if(Encoder.Uint<SP_Read.Encoder_Sample[0].Uint)
ShiftValue0=0.0f;
else if(Encoder.Uint<SP_Read.Encoder_Sample[1].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[0].Uint)) * \
SP_Read.Encoder_Xsh1[0].Float;
else if(Encoder.Uint<SP_Read.Encoder_Sample[2].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[1].Uint)) * \
SP_Read.Encoder_Xsh1[1].Float+((float)SP_Read.WyBzz[0].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[3].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[2].Uint)) * \
SP_Read.Encoder_Xsh1[2].Float+((float)SP_Read.WyBzz[1].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[4].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[3].Uint)) * \
SP_Read.Encoder_Xsh1[3].Float+((float)SP_Read.WyBzz[2].Uint);
else if(Encoder.Uint<SP_Read.Encoder_Sample[5].Uint)
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[4].Uint)) * \
SP_Read.Encoder_Xsh1[4].Float+((float)SP_Read.WyBzz[3].Uint);
else
ShiftValue0=((float)(Encoder.Uint-SP_Read.Encoder_Sample[5].Uint)) * \
SP_Read.Encoder_Xsh1[4].Float+((float)SP_Read.WyBzz[4].Uint);
break;
default :
break;
}
把这段注释掉,就不跑飞了,加上就不行。
大神看看,哪里有问题。谢谢
|