首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32F4之FPU性能的充分发挥-设置要点(2)

STM32F4之FPU性能的充分发挥-设置要点(2)

当然有些例外的是开发函数sqrt(),在arm_math.h中是这么定义的:
            static __INLINE arm_status  arm_sqrt_f32(float32_tin, float32_t *pOut)
                    {
                      if(in > 0)
                           {
                                    //    #if__FPU_USED
                                   #if (__FPU_USED == 1) && defined (__CC_ARM   )
                                          *pOut = __sqrtf(in);
                                #else     
                                           *pOut = sqrtf(in);
                                 #endif
                              return (ARM_MATH_SUCCESS);
                          }
                      else
                         {
                            *pOut = 0.0f;
                             return (ARM_MATH_ARGUMENT_ERROR);
                        }
              }   
      即开方用的函数是arm_sqrt_f32(),其中首先判断被开发的书是否大于0,只有大于0的才能进行运算,否则输出结果为0并返回“错误”标志。如果大于0,并且实用了FPU和__CC_ARM控制项,那调用__sqrtf()来完成编译,否则调用sqrtf()——这个sqrtf()是能在keil的math.h中找到的,即调用子函数来完成运算,而__sqrtf()呢?新出现的,相信大家都能猜到是什么玩意儿:对,就是VSQRT指令!因此要把这点性能也要发挥出来,就需要工程选项之C/C++选项卡的define中继续加入语句__CC_ARM才行。大家可以比较一下是否加入__CC_ARM编译后会汇编代码的差别巨大差别。
      当然,对于arm_sqrt_f32()函数还是有些麻烦,如果你确认被开方的书是大于等于0的,那就直接使用__sqrtf()函数完成运算,即一条简单的VSQRT指令。
      STM32F4固件库还提供了其他很有用的数学函数,都位于DSP_Lib文件夹,请大家慢慢探索,Discovery
继承事业,薪火相传
返回列表