你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Ubuntu下开发STM32---8.浮点运算

[复制链接]
qianfan 发布时间:2015-10-31 17:18
    cortex-m4内核具有浮点运算单元。如果不使用的话,还是有点浪费的。
/ z/ g7 z4 v6 G0 E* h+ v6 {8 ]3 J4 m* A+ `9 J% k, d
软浮点
0 u) h& Q' R6 ?& B( Y* i% [
gcc在默认的情况下使用软浮点运算。相关浮点运算测试的代码在softfloat.zip中。为了反汇编观察代码,这里特意去掉了Os优化。使用Newlib-nano库。
" k" y2 G* u; {2 C+ w3 V7 }+ e使用make sram,sudo make burns下载到SRAM中运行。从输出的时间间隔上来看,软件浮点也是挺快的。这里我们反编译一下main.o的代码看一下。6 h! v  o- Z+ j# ?
float add(float a,float b,float c )9 f: [- A- F9 b) N- _+ J; n" b: z
{
( T4 _) N; B* x    return a+b+c;
/ G! q, [& y' Y! P$ Y+ D. I$ @}

6 T0 ~% ?5 u$ s==> $ arm-none-eabi-objdump -d main.o
  D" h  C0 x3 i0 J7 t" } 2015-10-31 16:56:48屏幕截图.png 2 R9 ]. C9 Q* A6 ]2 F9 o
根据ARM C/C++过程调用标准,函数的前4个参数存放在R0-R3。如果超过4个参数,剩余的参数存放在栈中。并且最后一个参数先入栈。正是因为最后一个参数先入栈,我们才能使用可变参数这个特性。9 A6 y3 j* q% D0 u- p% J1 R6 H
; g9 `, @; B5 C- C! h0 Z
从反汇编的代码上看,在栈中新开辟了3个字(每个字占4个字节)的槽依次存放参数a,b,c。由于__aeabi_fadd仅有两个参数,对三个数字相加需要分为两次计算。第一次将a,b相加,第二次将c与前一次的结果相加。" ?& j; N: _: J3 n& i" a
6 `! x& O5 x' E6 I4 U
硬浮点
/ Q) S' H9 C6 U9 l. z可以在编译和链接的时候添加参数-mfloat-abi=hard -mfpu=fpv4-sp-d16。(注意,在链接的时候也需要添加这个参数。否则会报错。大概意思是你编写的C使用了硬件浮点。而链接的库使用的是软件浮点。两者不能合并。)相应的代码在hardfloat.zip中。6 W% z7 I6 A# w5 ?+ m8 Y% b7 x6 N
同样,还是对main.o进行反汇编:
! R3 `% n; U4 P+ ~4 C$ z. Y, u 2015-10-31 17:13:31屏幕截图.png 1 @$ x3 U, F" B% a6 ]+ R
# j, T( W( N& b2 F3 k2 _5 N& N% R2 }
从反汇编的代码上来看,这次使用的是特殊的浮点运算的指令。+ n0 ~4 E; a  T8 T
& B, n3 \6 L4 E  q& Z

; |, i+ p  H% \$ k
可以将softfloat和hardfloat的可执行文件下载至单片机中。可以发现使用硬件浮点运算的效果还是非常明显的。% y* d# M) \9 t/ G6 U" d, x

* U, R' F' O* a! J0 J

hardfloat.zip

下载

401.25 KB, 下载次数: 59

softfloat.zip

下载

401.21 KB, 下载次数: 67

赞 收藏 2 评论8 发布时间:2015-10-31 17:18

举报

8个回答
netlhx 回答时间:2015-10-31 20:07:43
楼主研究得很深入,跟贴学习
qianfan 回答时间:2015-10-31 20:29:32
netlhx 发表于 2015-10-31 20:07
# g) S3 r; e1 D5 a楼主研究得很深入,跟贴学习

) {) H5 [& s. e5 K2 y欢迎领导前来支持工作
你好我好大家好! 回答时间:2015-10-31 21:36:18
学习了            
kingsings 回答时间:2015-11-2 01:33:00
还没用Linux开发过单片机
kingsings 回答时间:2015-11-2 01:33:20
还没用Linux开发过单片机
秋天的通话 回答时间:2018-6-13 10:41:55
cool ,
baitiandesinian 回答时间:2018-6-13 18:21:03
7 I5 A: x. \: W
谢谢分享
STM1024 回答时间:2018-6-13 19:17:07
这么吊。不过能介绍一下软浮点的详细过程嘛?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版