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.

[参考译文] TMS320F28379D:浮点数学计算问题

Guru**** 2540720 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1356250/tms320f28379d-problem-with-float-math-calculation

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

我使用的是 TM320F28379D。
我在此器件上的浮点数计算有问题。

我有一个变量  

float32_t ic_inst=0.0;
float32_t vc_prev=0.0;

float32_t rec_vs_inst_pu=0;

我在中断函数的代码块中以10us 使用这些变量;

__interrupt void ControlISR (void){

ic_insts =(rec_vs_inst_pu - vc_prev)* 5.0f;  
vc_prev = rec_vs_inst_pu;

ic_inst= 9.83431262e-42 (DEN)-奇怪值

出现溢出、但我不明白为什么会发生这种情况? 您能帮助我吗?

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

    您好 Enes、

    您在项目属性的"处理器选项"中设置了什么 FPU 配置? 请 在调试会话中使用"Disassembly"窗口来单步执行汇编代码、这是找出未正确设置该操作的原因(即是否为特定寄存器加载了不正确的值)的最佳等待方式。 您将需要调试汇编代码、然后再继续操作。

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

    大家好、我使用的是 FPU32、

    在此代码中;
    "ic_inst=((rec_vs_inst_pu - v_prev)*5.0f;
    vc_prev=rec_vs_inst_pu;"
    当变量 rec_vs_inst_pu 的前一个值、即 v_prev、非常接近即时值时、结果接近于零、我认为这就是我遇到这个问题的原因、例如、当我将即时值增加200倍并进行处理时、 我在代码中没有得到错误。
    "ic_inst=(((rec_vs_inst_pu*200.0f)- vc_prev)*5.0f;
    vc_prev=rec_vs_inst_pu;"

    当我在处理器上处理 float64_t 时"不允许#1558-D 64位浮点运算"也出现类似这样的错误  

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

    您好 Enes、

    当变量 rec_vs_inst_pu 的前一个值,即 vs_prev,非常接近即时值时,结果变为接近零,我认为这就是我遇到这个问题的原因[/报价]

    可以、如果减去两个彼此非常接近的浮点值(在浮点中、由于浮点标准的性质、很难获得相同的值)、那么您将得到接近零的值。

    在处理器上处理 float64_t 时,我也遇到类似此类错误"#1558-D 64位浮点运算不被允许"
     

    您需要验证 在工程中使用的任何库(例如 driverlib、FPUfastRTS 等)都 包括 FPU32版本的库或是使用 FPU32配置构建的库。 可以通过打开库的 CCS 工程检查此情况(对于 driverlib、这位于 C2000Ware_5_02_00_00\driverlib\f2837xd\driverlib\ccs 中)。

    [/quote]