打印

STM32 GD32 运算速度差很远!!求大神指点

[复制链接]
2553|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
okeybomb|  楼主 | 2014-10-23 23:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近项目里碰到个问题,原本在STM32中可以跑完的程序,在GD32中却完全跑不完。解释下什么是跑完:我的程序需要在一个I2S DMA中断周期内完成所有对音频信号处理的工作,其中包含一些滤波器,使用了很大的参数数组,数组以const long形式编译,自然这些数组就会被存放进flash区,然后我的滤波器程序会调用这些数组的值进行运算,数组形式是const long  X[64][32][16]这样,也就是有64*32*16*32bit的数据,这样的数组总共有4个,那么数组总大小将是64*32*16*32bit*4=4194304bit
我传了几个附件上来,附件中我把这个滤波器的参数头文件传上来,求有兴趣的大神给分析下
附件中 b0.h  b1.h  b2.h  a2.h中存放的是滤波器的参数
下面的可作为测试程序

//////////////////////////////////////////////////////////////
//程序输入输出范围是 -32768 --- 0 --- 32767  
//fc取0-63,g取0-31 参数.rar (269.75 KB)
//这是个音频EQ程序,中心频率(fc)可调,+/-12dB增益(g),的采样率44.1K
///////////////////////////////////////////////////////////////
#include "b0.h"
#include "b1.h"
#include "b2.h"
#include "a2.h"
unsigned char fc=0;
unsigned char g=0;
long fitXz1=0;
long fitXz2=0;
long fitYz1=0;
long fitYz2=0;
short IIR(short DataIn)
{long in,out;
in =(long)DataIn;
out=((((long long)(b0[fc][g][0]))*in      )>>15)
      +((((long long)(b1[fc][g][0]))*fitXz1)>>15)
     +((((long long)(b2[fc][g][0]))*fitXz2)>>15)
      -((((long long)(b1[fc][g][0]))*fitYz1)>>15)
     -((((long long)(a2[fc][g][q]))*fitYz2)>>15);
fitXz2 = fitXz1;
fitXz1 = in;
fitYz2=fitYz1;
fitYz1=out;

        if(out> 32767){out= 32767;}
        if(out<-32767){out=-32767;}

return (short)out;
}
/////////////////////////////////////////////////////////////

沙发
shdjdq| | 2014-10-25 07:25 | 只看该作者
好象是程序要放前面的256k,后面的FLASH的速度会慢些,越往后速度会越慢。也有可能是外设的效能不是很高。不知是不是这样。

使用特权

评论回复
板凳
sunmeat| | 2014-10-27 08:43 | 只看该作者
shdjdq 发表于 2014-10-25 07:25
好象是程序要放前面的256k,后面的FLASH的速度会慢些,越往后速度会越慢。也有可能是外设的效能不是很高。 ...

我给试试去

使用特权

评论回复
地板
okeybomb|  楼主 | 2014-10-27 14:34 | 只看该作者
无解。。

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝