硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2894|回复: 1
收起左侧

[FPU] 为啥简单的浮点计算都出错了?

[复制链接]

12

主题

75

回帖

111

积分

初级会员

积分
111
发表于 2020-4-28 09:54:15 | 显示全部楼层 |阅读模式
在stm32h743系统,运行了RTX操作系统,然后DMA双缓冲方式 进行ADC采样。   HAL_ADC_ConvCpltCallback 函数中做一下ADC采样值的简单计算,
如以下代码,  之前 f1已经把ADC的数值读过来了。

优化选-0,都正常。

优化选-1,运行第1处,debug模式无法读取f1数值了,运行第2处,f2直接为0.

static void Calc_Batt_Capacity(uint16_t *pDat)
{
    float f1, f2;
    int i;
    static float Battery_Voltage_Sum;
    static uint8_t Battery_Voltage_Cycle;

    // 求平均
    f1 = 0;
    for (i = 0; i < Battery_Voltage_Data_Buffer_Size; i++)
    {
        f1 += *pDat++;
    }
    f1 /= Battery_Voltage_Data_Buffer_Size;

    // 电池电压
    f1 = f1 * 11.0f * ADC_Ref_mV / ADC_FullScale;   //  第1处
    // 比例
    f2 = (f1 - 23100.0f) / (29400.0f - 23100.0f);        //  第2处
    // 百分比
    f2 = f2 * 100.0f;

    if (f2 < 0)
    {
        f2 = 0;
        Battery_Capacity = f2;
    }
    else if (f2 > 100.0f)
    {
        f2 = 100.0f;
        Battery_Capacity = f2;
    }
    else //if(f2>=0 && f2 <=100.0f )
    {
        Battery_Voltage_Cycle++;
        Battery_Voltage_Sum += f2;

        if (Battery_Voltage_Cycle >= 5)
        {
            f2 = Battery_Voltage_Sum / Battery_Voltage_Cycle;
            Battery_Voltage_Sum = 0;
            Battery_Voltage_Cycle = 0;

            Battery_Capacity = f2;

        }
    }
}

真是想不明白,哪儿的问题了

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2020-4-28 09:58:01 | 显示全部楼层
优化问题,只能笨办法了,看看那条语句优化出问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 16:40 , Processed in 0.244564 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表