主题中讨论的其他部件:controlSUITE, SFRA
工具/软件:Code Composer Studio
大家好,
我编写了一个程序,通过sci与PC接口通信。 SCI发送了我的launchxl一些字符,我需要将这些字符转换为整数/浮点等
仅包含math.h。
我对这些计算有一些问题。 下面的子例程由for循环调用,用于我获得的每个sci字符。 我知道它不是最好的字符数转换算法,但无论如何。 :)
int whatcomesnext = 0; UINT16 bytecounter=0; UINT16 sdataA[8]; UINT16 rdataA[8]; UINT32 result=0; 浮点数32; 浮点数32除法器; 浮点数32除法器;
void stringToNumeral()
{
IF (SciaRegs.SCIRXEMU == 48)
{
whatcomesnext = 0;
}
否则IF (SciaRegs.SCIRXEMU == 49)
{
whatcomesnext = 1;
}
否则IF (SciaRegs.SCIRXEMU == 50)
{
whatcomesnext = 2;
}
否则IF (SciaRegs.SCIRXEMU == 51)
{
whatcomesnext = 3;
}
否则IF (SciaRegs.SCIRXEMU == 52)
{
whatcomesnext = 4;
}
否则IF (SciaRegs.SCIRXEMU == 53)
{
whatcomesnext = 5;
}
否则IF (SciaRegs.SCIRXEMU == 54)
{
whatcomesnext = 6;
}
否则IF (SciaRegs.SCIRXEMU == 55)
{
whatcomesnext = 7;
}
否则IF (SciaRegs.SCIRXEMU == 56)
{
whatcomesnext = 8;
}
否则IF (SciaRegs.SCIRXEMU == 57)
{
whatcomesnext = 9;
}
否则IF (SciaRegs.SCIRXEMU == 44 || SciaRegs.SCIRXEMU == 46)
{
whatcomesnext =",";
}
否则{
whatcomesnext = 0;
}
IF (SciaRegs.SCIRXEMU>10 && SciaRegs.SCIRXEMU!=32 && SciaRegs.SCIRXEMU!=13 && SciaRegs.SCIRXEMU!=44 && SciaRegs.SCIRXEMU!=46 && bytecounter <=7)
{
bytecounter=bytecounter+1;
如果(字节代入者>=1)
{
rdataA[bytecounter]=whatcomesnext;
}
}
否则,如果(SciaRegs.SCIRXEMU!=44 && SciaRegs.SCIRXEMU!=46)
{
bytecounter=0;
结果= 0;
除法=0;
}
如果(bytecounter=1)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext * 1000万;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=1亿;
}
}
否则,如果(bytecounter=2)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext *100万;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=1000万;
}
}
否则,如果(bytecounter=3)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext *10万;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=100万;
}
}
否则,如果(bytecounter=4)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
float32 value1 = whatcomesnext *100;
value=value1*100;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=10万;
}
}
否则,如果(bytecounter=5)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext *1000;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU!=44 && SciaRegs.SCIRXEMU!=46)
{
除法器=1万;
}
}
否则,如果(bytecounter=6)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext *100;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=1000;
}
}
否则,如果(bytecounter=7)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext *10;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=100;
}
}
否则,如果(bytecounter=8)
{
如果(whatcomesnext >=0 && whatcomesnext <=9)
{
值= whatcomesnext;
结果=值+结果;
}
IF (SciaRegs.SCIRXEMU=44 && SciaRegs.SCIRXEMU=46)
{
除法器=10;
}
}
}
"值"始终正确,但"结果"不正确。 当我发送1111.1111万或2222.2222万时,没有问题。 结果正确。 但对于3333.3333万,结果变为3333.3334万。 对于9999.9999万,结果= 1亿。
所以我需要一个正确的结果,根据我的结果,我将除以另一个值。 (33,25或7.7358万 等。一些浮点参数值)
我认为math.h是不够的。 我读过CLA和IQmath,但不能正确使用它们。 您有什么建议来提高计算精度?

