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.

[参考译文] TMS320F28374S:浮点运算、比较错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1208226/tms320f28374s-floating-point-operation-compare-error

器件型号:TMS320F28374S

大家好、

客户有问题需要您的帮助:

我们以[BUCK_F28004x]项目为基础来创建电源控制工程。  

然而,发现了浮点型运算和比较的问题。

由于基本项目进行了大量修改、因此不容易描述我们更改的部件。  

您想咨询 TI 工程师、可以为调查提供指导吗?  

float 类型操作错误的详细信息如下所示。  

数据被保存到一个具有一个 ADC 采样中断的数组中、此数组总计8个元素、并且在一个事件之后、从当前数组中的8个元素被求和(总和)。 然后移动平均值(BUCK_vOutSensored_Volts)。  

通过断点、我们发现八个元素的总和出错了、如下图所示。  

您能帮助检查这个问题吗?

谢谢。此致、

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

    总和 Vout 功能如下所示:

    在第1167行设置断点、然后全速运行多次、每次程序在断点处停止时、查看 sumTemp 值、发现有时 sumTemp 为354。 有时、SummTemp 为175、每次值都不同。  

    BUCK_AVG_ADC_SAMPLES 是一个值为8的宏。  无法确定哪个环路是错误的。  

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

    Ben、您好!

    客户是否为项目启用了任何优化? 此外、当客户逐步执行循环时、通过 各个添加项(即 temp[0]+ temp[1])会看到什么? 是否每个加法都是错误的?

    此致、

    Omer Amir

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

    您好、Omer:

    客户观察到、不能确定哪些单独的添加是错误的。

    添加测试条件:

    如果我关闭程序中的 ISR、SUM 操作就没有问题。

    此致、

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

    Ben、您好!

    您能否确认客户正在使用的优化设置?

    如果我关闭程序中的 ISR,总和操作将不会有问题。

    您是否可以测试求和环路期间是否发生中断? 对此进行测试的一种简单方法是在循环开始前和结束后切换全局变量、然后检查 ISR 中的值。

    此致、

    Omer Amir

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

    您好、Omer:

    他关闭了优化。 有三个 ISR、两个 ADC ISR、一个计时器 ISR。 未发生计时器 ISR、发生了两个 ADC ISR。

    ADC1 ISR

    ADC2 ISR

    计时器 ISR

    断点位置

    该过程如下:

    程序在第1167行停止时、查看全局变量 intr1、2和3的值。

    2.全速运行,程序在1171行停止。

    3.查看全局变量 intr1、2、3的值, intr1、2的值已经改变, intr3的值没有改变。

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

    我们可以看到 TMS320F28374S 的 Errorsheet 中描述了 FPU 异常。  

    现在我们想知道中断太多且每个中断触发间隔更短、是否会导致浮点运算出错?  

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

    Ben、您好!

    此勘误表主要是指具有 操作指令和具有匹配源/目标寄存器的移动指令、不一定是由中断引起的。 如果客户的代码出现这种情况、他们可以添加伪指令(如 NOP)来清理流水线(例如在 ISR 的开头)。 如果客户的中断正在使用浮点值、那么也许需要在运行环境 保存期间仔细检查它们是否被存储在堆栈中。 此外、 在调试时、它们可以将断点放置在 ADC ISR 中、以触发并监控先前存储了总和的浮点寄存器、从而查看这些值是否被复制到栈中、如果不是、ISR 代码是否正在修改它们的值。

    此致、

    Omer Amir