使用如下测试程序在stm32f103c8t6单片机的keil工程上编译
int main(void)
{
float data1;
data1=0.123;
data1+=0.456;
while(1)
{
data1+=0.456;
}
}
编译出汇编代码:
25: data1=0.123;
0x08000648 4C0D LDR r4,[pc,#52] ; @0x08000680
26: data1+=0.456;
0x0800064A 4620 MOV r0,r4
0x0800064C F7FFFE33 BL.W __aeabi_f2d (0x080002B6)
可以看到data1变量被赋初值后放入R4寄存器,随后又从R4移到R0,接着跳入浮点运算函数__aeabi_f2d 进行浮点运算。
让我们来看看计算浮点运算函数__aeabi_f2d需要多少条指令:
开始运算的时候是31301
执行完__aeabi_f2d,指令位置为31554,总共执行了31554-31301=253条指令。
如果把float型放大1000倍,转换成整型进行运算,几条指令就可以解决了。