工具与软件:
大家好!
作为持续应用的一部分、我们需要在 MSP430FR5969上测试数学运算的近似时序。MSP430板是16位的、没有 FPU、并通过软件处理浮点运算。
虽然我们进行测试、但观察到当涉及2个稍大的浮点值时、结果将四舍五入到最接近的整数。
例如:
浮点 a=9999999.5、b=1.0;
float res=a*b;
在调试时、我们发现 res 的值为10000000.0
我们还检查了一些其他值、发现当结果的整数值大于7位时、该值会四舍五入到最接近的整数。
如果结果值很小、则数据是正确的。 浮点应能够处理此大小的数据。
有些人可以澄清这种行为、并提供一些有关我们可以使用的数据限制的信息、或者我的理解是否有误。
我们非常感谢您提供任何答案。
谢谢。此致、
Ruthvik R
BSL 代码 :
#include
#include
#include
#include
浮点 c = 99999.5f;
浮点 d = 1.0f;
浮点结果;
int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~μ H LOCKLPM5;
FRCTL0 = FRCTLPW | NWAITS_1; //为闪存设置一个等待状态
PJSEL0 |= (BIT6 | BIT7); //对于 HFXT
CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
CSCTL1 = DCOFSEL_6; //将 DCO 设置为8MHz
CSCTL2 = SELA_1 | SELS__HFXTCLK | SELM__HFXTCLK;
CSCTL3 = 0; //将所有分频器设置为1
CSCTL4 = HFXTDRIVE_2 | HFFREQ_2 | LFXTOFF;
应执行的操作
{
CSCTL5并且=~(LFXTOFFG | HFXTOFFG); //清除 XT1和 XT2故障标志
SFRIFG1 &=~OFIFG;
}
while (SFRIFG1&OFIFG); //测试振荡器故障标志
CSCTL0_H = 0; //锁定 CS
// PIN 配置
P2DIR |= BIT2;
while (1)
{
P2OUT |=位2;
结果= c*d;
P2OUT &=~BIT2;
结果= c*d;
}
返回0;
}