This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F280049:方程评估结果出错!

Guru**** 2966500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/940418/ccs-tms320f280049-equation-evaluation-result-came-wrong

器件型号:TMS320F280049

工具/软件:Code Composer Studio

大家好、

我不熟悉 CCS、在运行下面显示的代码时、我得到了变量 R_RTD 和 Cabin_Temp 在计算后出现错误的结果。 这里可能出现了什么问题。 我看到的是一个不那么复杂的计算。  

Int32 R1 = 0x00000000;
Int32 R2 = 0x00000000;
float32 Cabin_Temp;//车厢温度
float32 R_RTD;// RTD 电阻 

这是声明部分、下面是计算部分  

R1 = SpiaRegs.SPIRXBUF;
R1 = SpiaRegs.SPIRXBUF;
R1 = R1<<8;
R2 = SpiaRegs.SPIRXBUF;
R1 = R1|R2>>8;
R_RTD =(R1*1080)/(4194304*16);// RTD 电阻,R_RTD =(R1*R_ref)/(2^22*增益)
CA舱 温度 =((R_RTD/100)-1)/(0.00385);//车厢温度、Cabin_temp =((R_RTD/RO)-1)/alpha 

我希望答案 R_RTD 接近100、Cabin_Temp 接近0.2、而是显示随机负值。

请帮帮我

此致、

葡萄园 N

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否知道此表达式...

    [引用用户="Vineyeth N"](R1*1080)/(4194304*16)[/引用]

    (笑声) 是否完全以32位整数数学计算?  尤其是、除法会截断。  仅保留除法结果的整数部分。  其余部分将被忽略。  计算完这个完整的整数表达式后、它会转换为浮点值、以分配给 R_RTD。  这种行为是否说明了问题?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    感谢您的回答。  

    很抱歉耽误你的时间、我认为你所说的可能是问题。 此外、我认为我的计算超出了累加器的限制。 有没有机会? 我的变量 Cabin_Temp 是一个32位变量。 如果我执行乘法或除法、我将需要64位累加器、对吧? 这是否被认为是正确的?

    此致、

    葡萄园 N

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    要了解浮点类型的限制、请在 C28x 编译器手册中搜索 标题 为"数据类型"的子章节。

    谢谢、此致、

    乔治