yangjiaoshai 发表于 2021-12-2 14:41

hc32f460浮点运算很费时间吗?

单片机使用的hc32f460jeua,系统时钟设置的为200M,见图片获取时钟参数,
然后在ADC中断内执行少量的浮点运算,ADC中断周期为50us,在ADC执行的函数插上IO口跳变,开始然LED1跳变,LED1对示波器蓝色,然后运算开始和结尾用LED0来指示跳变,LED0对应示波器黄色,见示波器抓拍图片,在蓝色的1和2跳变之间只执行了4条语句,用时17Us,请问这个正常吗?执行浮点运算这么耗时吗?

sjnh 发表于 2021-12-2 14:49

M4硬件只支持单精度浮点计算,而C语言默认是双精度的浮点运算,可能速度并不快

martinhu 发表于 2021-12-2 16:01

FPU功能不是默认就使能的,需要配置之后才可以,否则对应的运算就很慢,开启方法和友商的一样,因为属于内核的东西 。

xch 发表于 2021-12-2 17:13

不正常。你是不是没有打开FPU?

我有个程序也是ADC信号处理,MCU主频设置144MHZ:
{
Vbat_mv = (ADC_VREFINT*48000+ (adc_result>>1)) /adc_result;
tmp = (float)adc_result *(float)Vbat_mv;
tmp = tmp/3000.0;
asm("nop");
tmp = tmp/16.0;
Tamb = (tmp -TS_CAL1 )*(130-30)/(TS_CAL2-TS_CAL1)+30-4.3;
Tamb_int = (int16_t)(Tamb*10);
   
Vsen_uv = ( (uint32_t)adc_result *(uint32_t)3300*125 +4096 )>>(13);
}

打开FPU,计算394~398周期,相当于494/144 微秒; (第一次运算慢些398拍)
关闭FPU,计算979~980周期,相当于慢了一倍。

xch 发表于 2021-12-2 17:17

改成双精度运算,且打开FPU 运算时间增加到523拍,523/144微秒。不到4微秒。

xch 发表于 2021-12-2 17:41

按照你的函数CurrentReconstruction,在我的144MHZ mcu上跑了457拍,3微秒多.
使用双精度。
uint32_t cnt_dsp;
double ia,ib,ic;
const double ia_offset= 0.1,ib_offset= 0.2,ic_offset= 0.3;
void Dsp(void)
{
cnt_dsp = TIM2->CNT;
ia = ( (double )adc_result -ia_offset ) *0.00234;
ib = ( (double )adc_result -ia_offset ) *0.00234;
ic = ( (double )adc_result -ia_offset ) *0.00234;
ib = 0.0 -ia-ic;
cnt_dsp = TIM2->CNT-cnt_dsp;
asm("nop");
}

caigang13 发表于 2021-12-2 21:18

如果没有FPU的话是这样

地瓜patch 发表于 2021-12-2 22:22

费,很费

xch 发表于 2021-12-3 09:21

以上数据说明你的MCU 时钟频率不是200MHZ. 可能仅20MHz 左右

oufuqiang 发表于 2021-12-3 10:13

本帖最后由 oufuqiang 于 2021-12-3 10:49 编辑

unsigned int long cnt_dsp;
double ia,ib,ic,adc_result;
const double ia_offset= 0.1,ib_offset= 0.2,ic_offset= 0.3;
void Dsp(void)
{
ia = ( (double )adc_result -ia_offset ) *0.00234;
ib = ( (double )adc_result -ia_offset ) *0.00234;
ic = ( (double )adc_result -ia_offset ) *0.00234;
ib = 0.0 -ia-ic;
}

void main()
{
      while(1)
      {
                Dsp();
      }
}

这个我放到51上面试了试,1217个时钟,慢3倍,同频率下,感觉还能接受。35MHz40微秒.

yangjiaoshai 发表于 2021-12-3 13:12

第一个是没打开FPU,然后我把费时的计算优化了,基本可以了

james03 发表于 2021-12-3 13:43

1)、确认开启了硬件FPU
2)、确认是否开启了硬件Cache
3)、如何不是必须要求使用双精度,可以使用单浮点运算

cyclefly 发表于 2021-12-7 15:22

貌似相对来说是比较费时的
页: [1]
查看完整版本: hc32f460浮点运算很费时间吗?