|
cortex-m4内核具有浮点运算单元。如果不使用的话,还是有点浪费的。 软浮点 gcc在默认的情况下使用软浮点运算。相关浮点运算测试的代码在softfloat.zip中。为了反汇编观察代码,这里特意去掉了Os优化。使用Newlib-nano库。 使用make sram,sudo make burns下载到SRAM中运行。从输出的时间间隔上来看,软件浮点也是挺快的。这里我们反编译一下main.o的代码看一下。 float add(float a,float b,float c ) { return a+b+c; } ==> $ arm-none-eabi-objdump -d main.o
根据ARM C/C++过程调用标准,函数的前4个参数存放在R0-R3。如果超过4个参数,剩余的参数存放在栈中。并且最后一个参数先入栈。正是因为最后一个参数先入栈,我们才能使用可变参数这个特性。 从反汇编的代码上看,在栈中新开辟了3个字(每个字占4个字节)的槽依次存放参数a,b,c。由于__aeabi_fadd仅有两个参数,对三个数字相加需要分为两次计算。第一次将a,b相加,第二次将c与前一次的结果相加。 硬浮点 可以在编译和链接的时候添加参数-mfloat-abi=hard -mfpu=fpv4-sp-d16。(注意,在链接的时候也需要添加这个参数。否则会报错。大概意思是你编写的C使用了硬件浮点。而链接的库使用的是软件浮点。两者不能合并。)相应的代码在hardfloat.zip中。 同样,还是对main.o进行反汇编:
从反汇编的代码上来看,这次使用的是特殊的浮点运算的指令。 可以将softfloat和hardfloat的可执行文件下载至单片机中。可以发现使用硬件浮点运算的效果还是非常明显的。 |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
谢谢分享