[STM32]

学习单片机以来的第二大困惑了—关于乘除法的相关运算

[复制链接]
7218|21
手机看帖
扫描二维码
随时随地手机跟帖
始于116|  楼主 | 2013-12-11 13:51 | 显示全部楼层 |阅读模式
以前学习ATmega的芯片入门的,学习常见的一些模块使用吧,也没怎么接触一些数学的东西,今年做电设用了一些浮点数的运算,感觉运行速度好慢的说,一直烙下心病了。。。。。。最近用STM32,也有一些东西要用到一些除法什么的,查了一些大家的说法,有的说移位什么的实现的,现在很困惑,是不是在keil编译的时候就自动给优化成了一些简单地算法什么的,开方平方什么的也有吗?还是这个工作是在单片机里完成的,总之也说不十分清楚了,很迷糊,想问一下各位大神这在技术文档或者哪里有相关的过程介绍,虽然可能看效果或者用示波器什么的实际测试一下也知道效率,但想着要明白原理,谢谢各位了!

相关帖子

始于116|  楼主 | 2013-12-11 13:55 | 显示全部楼层
附:一个Sqrt函数引发的血案,没太看懂,也是引发自己一直不安的原因,大家可以给原理上解释一下,虽说单片机和电脑某些东西相似,真心很难接受二分查找,牛顿迭代的效率会这么低。。。。。。。。。

使用特权

评论回复
始于116|  楼主 | 2013-12-11 13:56 | 显示全部楼层
大神们一定要回复呀!!!!

使用特权

评论回复
ayb_ice| | 2013-12-11 14:13 | 显示全部楼层
用一款MCU,应该对内核基本特点有所了解

使用特权

评论回复
znmcu| | 2013-12-11 14:37 | 显示全部楼层
大多数人对自己所使用的硬件,cpu,并不熟悉。做什么工作,大概会怎样的效率,要心里有数。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
始于116 + 2 很给力!
znmcu| | 2013-12-11 14:38 | 显示全部楼层
你如果涉及大量数学浮点计算,建议用dsp,或者有fpu的arm或单片机。

使用特权

评论回复
craaazyfor| | 2013-12-11 15:56 | 显示全部楼层
单片机来做浮点运算当然慢了,尽量避免浮点,实在避免不了,上DSP吧,或者上M4

使用特权

评论回复
Schvian| | 2013-12-11 16:18 | 显示全部楼层
STM32没事的,尽管跑浮点运算,除非你是做数字信号处理且对时间要求严格

使用特权

评论回复
huangxz| | 2013-12-11 19:01 | 显示全部楼层
m4有浮点处理器,很给力的。
用avr之类的不适合进行浮点运算,这是由芯片本身决定的。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
始于116 + 2 很给力!
dirtwillfly| | 2013-12-11 19:44 | 显示全部楼层
用51进行乘除法运算,也很慢。
这是硬件条件决定的

使用特权

评论回复
w522930954| | 2013-12-12 08:52 | 显示全部楼层
楼主要的是原理?乘法除法的原理?你可以找以前用汇编编写除法器的代码看看,前提是没有用硬件除法器的算法看一下,原理基本就懂了,然后就是其他的问题都是数学的概念了、

使用特权

评论回复
始于116|  楼主 | 2013-12-12 11:03 | 显示全部楼层
w522930954 发表于 2013-12-12 08:52
楼主要的是原理?乘法除法的原理?你可以找以前用汇编编写除法器的代码看看,前提是没有用硬件除法器的算法 ...

汇编的跟我用硬件的算的效率一样吗???

使用特权

评论回复
始于116|  楼主 | 2013-12-12 11:07 | 显示全部楼层
huangxz 发表于 2013-12-11 19:01
m4有浮点处理器,很给力的。
用avr之类的不适合进行浮点运算,这是由芯片本身决定的。 ...

用的就是M4,不过不清楚所谓内部DSP用不用我人为调用,还是直接写数学公式就DSP给处理了,英文技术文档,诶,用的急也没怎么看看,关键是单片机工作的处理流程不清楚

使用特权

评论回复
始于116|  楼主 | 2013-12-12 11:09 | 显示全部楼层
dirtwillfly 发表于 2013-12-11 19:44
用51进行乘除法运算,也很慢。
这是硬件条件决定的

所谓硬件决定,硬件自带除法运算单元的又是怎么处理的,比软件模拟的快吗?还是主要由主频什么的决定??

使用特权

评论回复
w522930954| | 2013-12-12 11:12 | 显示全部楼层
始于116 发表于 2013-12-12 11:03
汇编的跟我用硬件的算的效率一样吗???

用除法举例,如果自带硬件除法器,你只是给除法器赋值然后除法器会自动给你算好结果就行了,过程不需要你管。但是如果不带除法器,c语言的除**转成汇编的除法算法,是按照指令一条条跑出来的结果,具体指令周期和效率跟具体运算相关

使用特权

评论回复
始于116|  楼主 | 2013-12-12 11:12 | 显示全部楼层
znmcu 发表于 2013-12-11 14:38
你如果涉及大量数学浮点计算,建议用dsp,或者有fpu的arm或单片机。

谢谢了,只是我想知道我每一个小步骤的具体时间,这样我在中断里写一些东西防止它溢出,虽然我可以示波器断点看看占空比,但总想着明白原理还好

使用特权

评论回复
始于116|  楼主 | 2013-12-12 11:13 | 显示全部楼层
znmcu 发表于 2013-12-11 14:37
大多数人对自己所使用的硬件,cpu,并不熟悉。做什么工作,大概会怎样的效率,要心里有数。 ...

很有道理

使用特权

评论回复
xiaozhuqing1| | 2013-12-12 11:49 | 显示全部楼层
这个我还是仔细想过并验证过。
在STM32中,有专门的定点乘法和除法器。  比如A/B就是一条指令 UDIV或者SDIV就完成了。
但是如果其中的A是浮点或者double型,B是整形。 那么KEIL就会把B转换成double型。 然后调用貌似dfdiv之类的函数,这个函数是keil自带的,经过几百条指令运算返回一个double型数据。
类似的sqrt pow sin cos都是利用keil自带的汇编语言函数计算的。

但是stm32 f4内部有浮点计算功能,应该可以快速计算非定点数据的乘除法运算。

谈及效率,AT89C51处理一个浮点型除法大约1ms吧,带有流水线功能的也得100-200us。
STM32F1系列如果在72Mhz下10us差不多就完成了(没有测量,估计)

使用特权

评论回复
黄小俊| | 2013-12-12 13:41 | 显示全部楼层

使用特权

评论回复
land_rover| | 2013-12-12 14:31 | 显示全部楼层
有帮助

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

199

帖子

2

粉丝