18263|36

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

cotexM3开方函数SQRT [复制链接]

谁有cotex M3开方函数,是32位或64位整数开方的函数,多谢提供者,本人非常需要
keil c的函数库中只有double的开方函数,太慢了,我的50多个模拟量需要开方,光开方在72Mhz下都需要10多ms,这是不能接受的

此帖出自stm32/stm8论坛

最新回复

                                   36楼说得好,其实我想在STM32上面72M可能10us就能做好。要做到10us,多半得用一些汇编:先做归一,然后通过查表(表不用大,256字节就足够)先得到准确的初值,之后通过硬件除法(应该使用CortexM3的这个特性来加快运算速度)而不是使用移位,硬件除法只需几个循环就可以得到最终结果。   详情 回复 发表于 2008-12-4 10:53
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

矢量是要开发的。

                                  
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

在线等待大家的好消息呀

在线等待大家的好消息呀,急急的

哪位位大侠有呀
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 

香水城,求救

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 

谢谢你的信任,我也没有这样的函数

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 

开方函数SQRT

                                   开方函数SQRT,记得在其它版面有人讨论过,速度号称很快
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 

如果会手工算开方,这个程序不难吧

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 

同意楼上

                                   同意楼上,手工算开方是万能的,不管用哪个CPU(MCU,MPU,DSP)
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 

多谢大家的意见,手工开放是用十进制的

多谢大家的意见,手工开放是用十进制的,计算机怎么要实现这个手工开方,还不如用double库了
我要的是实质性的建议
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 

十进制运算与二进制运算没有本质区别

                                 7楼这个建议就是一个实质性的建议,估计楼主是想要现成的程序吧。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 

看看这个,网上随便找找很多啊

                                 http://www.power-bbs.com/zixun/jishuwenzhang2/20070903/18935.html
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 

目前最快的算法是牛顿叠代

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 

多谢,多谢

我已经找到了,手算的方法,我想使用TI的函数原型,可是M3没有数符号的指令
需要一位一位的移动太费劲了,所以我就使用了手算,循环16次,虽然比T1的32的条无跳转指令慢了一下,但还是可以接受的

多谢大家的指点
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 

直接展开循环多快,不用跳转!

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 

想块?查表,哈哈

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

16
 

牛顿迭代

                                   牛顿迭代,确实很快,对32位数据进行开方,大概只需3个循环;对64位数据进行开方,估计6个循环就够了
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 

牛迭,初始值查表。

ARM优化那本书上有的。
俺老师用过
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

18
 

楼主不厚道,大家帮你这么多忙,你问题解决了也不把代码

                                 下次再来问问题,别人可能就没有这么热心了。
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

19
 

过分强调运算时间一般都是程序结构没有考虑好

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

20
 

直接调用就可以了!

unsigned int Real_Sqrt_16(unsigned long int M)
{
    unsigned int N, i; 
    unsigned long tmp, ttp;   // 结果、循环计数 
    if (M == 0)               // 被开方数,开方结果也为0      
       return 0;     
    N = 0;     
    tmp = (M >> 30);          // 获取最高位:B[m-1]   
    M <<= 2;     
    if (tmp > 1)              // 最高位为1    
    {   
        N ++;                 // 结果当前位为1,否则为默认的0     
        tmp -= N;     
    } 
    for (i=15; i>0; i--)      // 求剩余的15位   
     {         
        N <<= 1;              // 左移一位 
        tmp <<= 2;
          tmp += (M >> 30);     // 假设        
            ttp = N;         
        ttp = (ttp<<1)+1;         
        M <<= 2;         
        if (tmp >= ttp)       // 假设成立        
         {             
        tmp -= ttp;             
        N ++;         
        }     
    }     
    
    return N; 
}
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表