4584|14

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

刚用这个片子没几天,没什么送大家的! [复制链接]

送大家一个汇编版的浮点乘法!比标准库要快不少!
;==============================================================================================
; ----Function: float Float_Mul(float A,float B);
; -Description: 
; --Parameters: 
; -----Returns: 
; -------Notes: 
;==============================================================================================
Float_Mul    
            movs    r0,r0            ;判零
            bxeq    r14
            movs    r1,r1
            moveq    r0,r1
            bxeq    r14
            ubfx    r2,r0,#23,#8
            ubfx    r3,r1,#23,#8
            add        r2,r3
            subs    r2,#0x7e
            movcc    r0,#0
            bxcc    r14
            cmp        r2,#0xff
            mvnhi    r0,#0
            bxhi    r14
            eors    r3,r0,r1
            orrmi    r2,#0x100
            lsl        r0,#8
            lsl        r1,#8
            orr        r0,#0x80000000
            orr        r1,#0x80000000
            umull    r1,r0,r0,r1
            adds    r0,#0x40
            lsrpl    r0,#7            ;小于0.5
            subpl    r2,#1            ;指数调整
            lsrmi    r0,#8            ;大于等于0.5
            eor        r0,#0x800000    ;清第23位
            bfi        r0,r2,#23,#8
            bx        r14
此帖出自stm32/stm8论坛

最新回复

                                 只是自已用到的那几个会去做特别优化!   详情 回复 发表于 2008-6-7 21:19
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

看样子大家对算法优化不感兴趣啊!

                                  
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

俺来捧个场子,LZ说说怎么用啊

                                 比如如何调用,尤其是如何从C程序调用。
此帖出自stm32/stm8论坛
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 

; ----Function: float Float_Mul(float A,float B);

注释里写得很清楚啊;
楼主自己写的汇编么?
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 

我都把浮点转整型来处理!整型运算速度更快!

                                 int x=(FLOAT y *100000); 
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 

是自已写的汇编!

关于浮点转为定点和方式!
这种方式当然会更快!但在一些应用中不得不用浮点还要要速度时就有用了!

浮点转为定点我有更快的方式!
利用Q格式的数据! 而后用移位的方式变换数据格式! 
如:  小数 0.1  变为Q16的格式为:  0.1*65536
这种方式会有点精度损失!但满足大部分需要!
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 

好!

我来捧个场!

但是请教个问题!你的浮点数从哪来的?目前,我只用过一种传感器,输出的是浮点数(IEE754),否则,我的系统里。没有浮点数,都是整数计算!所以用不到你这个函数!
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

8
 

"你的浮点数从哪来的?"

哈哈! 从ADC来  ADC转换是整数,但是最终标定会是浮点数!

例如:12位的ADC用来测量温度传感器。

可能是这样: 温度电压= X/4096 * 3.3(V) * 1000(mv)
因为ADC的REF=3.3V  

如果用温度标定又可以是这样:X/4096 *100(度)* 1000* ADJ_X;

用100度来标定传感器,这时ADC的采样值是 X ! 
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 

有必要用浮点么?

别说这种简单的定标,就算是 FFT输出的定标,我也是整数形式是输出,保留小数点后3位!我的系统里就没有浮点!如果用浮点,就没法玩下去了!
另外,数学运算,尽量不要调用库函数,最好开方函数,三角函数,等等,这些都自己重写!效率高!
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 

奇怪的想法,有库函数不用要自己写?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 

太有必要了!

当你的运算速度成为瓶颈的时候,就两种选择,
要么换CPU,设计推倒重来!
要么优化算法,很多算法都比标准的库函数快得多!
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 

建议

                                 汇编代码需要注明参数使用的寄存器和代码使用的寄存器,即使这个代码是在C中调用的
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 

测试的速度是标准库的10倍以上!和程序执行的空间有关

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 

Q16 是我用的比较多的折中的方法;

                                 也许我比较懒,大面积的修改库函数我是不干的;
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

15
 

大面积修改是不可能的!

                                 只是自已用到的那几个会去做特别优化!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表