Stm32F4XX和Stm32H7XX开启FPU浮点运算
#softvfp 软浮点
#fpv5-d16 or fpv5-sp-d16 cortex-M7 单精度硬件浮点
#fpv4-d16 or fpv4-sp-d16 cortex-M4 单精度硬件浮点
#fpv5-dp-d16 cortex-M7 双精度硬件浮点,这个在GCC下编译不通过,不确定是否正确
开启STM32 浮点运算,需要设置下面的参数:
M4内核:
-mfpu=fpv4-sp-d16
M7内核:
-mfpu=fpv5-sp-d16
-mfloat-abi=hard #这里=soft的话就是软件模拟浮点运算,非常耗时。
另外rtthread下开启FPU后gcc下编译工程报错的话,还需要加上 -Wa,-mimplicit-it=thumb
Error: thumb conditional instruction should be in IT block – `strexeq r1,r2,[r4]’
timer1 = HAL_GetTick();
for(uint32_t i = 0; i < 1000000U; i++)
{
res = a*b;
}
printf("current timer is %lu\n",HAL_GetTick() - timer1);
res +=1;
rt_thread_delay(5000);
开启FPU的情况下,运算100万次flot运算,时间时209个tick,我这里时209个ms,
关闭FPU的情况下,运算100万次flot运算,时间时555个tick,我这里时555个ms,
可见FPU对浮点运算性能提升还是有非常大帮助的。