1.前语
本应用笔记依据STM32L4″>STM32L476渠道,经过实践丈量来评定使能FPU“>FPU时浮点运算功率的状况。
2.测验东西
STM32L476 Nucleo,示波器
3.测验办法
MCU 运转频率设置为16MHz,依据下面公式1 做N次浮点运算,分使能FPU和制止FPU两种状况,测验完结相同运算所需求的时刻。在例程中经过翻转IO PB13 来标定完结运算所需求的时刻。
3.1 测验代码
依据公式1,别离界说A、B、C 三个常量,如下:
/* Private constants———————————————————*/
#define A_CONSTANT(0.285f)
#define B_CONSTANT(0.443f)
#define C_CONSTANT(0.698f)
依据公式做对应的运算并经过GPIOC Pin0 输出,测定对应耗费时刻:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_SET);
temp = A_CONSTANT*x*x +B_CONSTANT*x + C_CONSTANT;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_RESET);
3.2 代码剖析
依据测验用的一元二次方程,经过IAR 编译后,汇编成果如下:
3.2.1 FPU 使能
从汇编代码能够看出,使能FPU 的状况下,完结一元二次方程的运算只需求7 条单周期指令,一共耗时为7 个Clock 周期。经过IAR 的政策形式运转,需求的CPU cycles 为7.
3.2.2 FPU 制止
从汇编代码能够看出,未使能FPU 的状况下,完结该一元二次方程的运算需求履行14 条指令,其间包含3 条两周期指令,6 条单周期指令,5 条程序跳转指令。经过IAR 的政策形式运转,需求的CPU cycles 为207.
4.测验数据及定论
IO完结两次翻转耗时6.48 uS;
使能FPU 时,除掉IO 翻转耗时,完结一次运算时刻为6.52 uS(13 uS -6.48 uS),
如下图示:
制止FPU 时,除掉IO 翻转耗时,完结一次运算时刻为87.4 uS(93.88 uS -6.48 uS),如下图示:
小结下,依据上面相关测验数据大致可得出如下定论:
• 完结相同的一元二次方程运算,制止FPU时所耗费的时刻约为使能FPU时耗费时刻的13.4 倍左右。