工具与软件:
你(们)好、
我发现了一个奇怪的问题、在浮点数计算期间、预期值 会在结果预计约为3328.0f (从 ADC 测得的毫伏)时波动。 我相当肯定这是一个器件/勘误表问题、因为无论我在代码中的哪个位置进行此计算、也无论我使用什么变量来存储结果并继续波动。 (我尝试在 main ()中执行此计算、而不是在计时器触发的中断中执行此计算、结果相同)。
为了演示该问题、我使用 uint32_t 进行了相同的计算、但没有看到这种波动。 然后我将结果转换为浮点值(并除以10.0f)、我再次看到波动。
CH3_VOLTAGE_AVERAGE_DMV 是类型 uint32_t
CH3_VOLTAGE_AVERAGE_mV[1]是类型 悬空
以在使用时保持精度 uint32_t、 CH3_VOLTAGE_AVERAGE_DMV 是 ch3_VOLTAGE_AVERAGE_mV 大小的10倍。
您可以看到第一行、其中的 uint32_t 执行计算:
Ch3_VOLTAGE_AVERAGE_DMV =(SENSE_VOLTAGE_DMV * 625)/ 1000;//波动介于33281和33268之间。 总通量为1.3mV (当您将 DMV 除以10得到 mV 时)。
在出现 float 转换和除以10.0f 的第二行中:
ch3_voltage_average_mV[1]=((float) ch3_voltage_average_DMV)/10.0f;//目前的波动介于3311和3344之间。 这总波动为33mV。
相关代码部分用红色圈出:
我浏览了勘误表:TMS320F28002x 实时 MCU 器件勘误表器件修订版 A、0
我发现了一个标题为: FPU 到 CPU 寄存器移动操作之前在第14页上有任何 FPU 2p 操作。
我的问题可能是这个错误以某种方式导致的吗? 我正在使用最新的编译器 V22.6.1、因此我不确定这是如何实现的?
非常感谢您对此的支持。
此部分的分解也可以在下面找到: