为什么28027会跳过函数执行下一条语句
在调用语句的时候不会进入函数,直接进行下一条语句fft(ceshi,R,zm,zinv);
input=_IQ20(alfa);
例如,在上面两句附近分别设置断点,正常应该是在fft调用时进入子程序,但并没有进入,而是直接进行了input语句
这是为什么
函数语句如下
void fft(float sr[],float sx[],int m0,int inv)
{
int i,j,lm,li,k,lmx,np,lix,mm2;
_iq t1,t2,c,s,cv,st,ct,sri,srk,srj,sxk,sxi,sxj;
if(m0<0)
return;
lmx=1;
for(i=1;i<=m0;++i)
lmx+=lmx; //form 2**m0
cv=_IQ20div(_IQ20(PI),_IQ20(lmx));
//cv=2.0*PI/(double)lmx;
ct=_IQ20cos(cv);
//ct=cos(cv);
st=_IQ20sin(cv);
st=_IQ20mpy(_IQ20(-inv),st);
//st=-inv*sin(cv);
np=lmx;
mm2=m0-2;
for(i=1;i<=mm2;++i)
{
lix=lmx;lmx/=2;
c=ct;s=st;
for(li=0;li<np;li+=lix)
{
j=li;k=j+lmx;
srj=_IQ20(sr);//dingyi
srk=_IQ20(sr);//
sxj=_IQ20(sx);//
sxk=_IQ20(sx);//
t1=srj-srk;
t2=sxj-sxk;
//t1=sr-sr;t2=sx-sx;
srj=srj+srk;
sxj=sxj+sxk;
srk=t1;
sxk=t2;
sr=_IQ20toF(srk);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxk);
sx=_IQ20toF(sxj);
//sr+=sr;sx+=sx;sr=t1;sx=t2;
++j;++k;
srj=_IQ20(sr);//dingyi
srk=_IQ20(sr);//
sxj=_IQ20(sx);//
sxk=_IQ20(sx);//
t1=srj-srk;
t2=sxj-sxk;
//t1=sr-sr;t2=sx-sx;
srj=srj+srk;
sxj=sxj+sxk;
//sr+=sr;sx+=sx;
srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
//sr=c*t1-s*t2;sx=s*t1+c*t2;
sr=_IQ20toF(srk);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxk);
sx=_IQ20toF(sxj);
}
for(lm=2;lm<lmx;++lm)
{
cv=c;
c=_IQ20mpy(c,ct)-_IQ20mpy(st,s);
s=_IQ20mpy(st,cv)+_IQ20mpy(ct,s);
//c=ct*c-st*s;s=st*cv+ct*s;
for(li=0;li<np;li+=lix)
{
j=li+lm;k=lmx+j;
srj=_IQ20(sr);//dingyi
srk=_IQ20(sr);//
sxj=_IQ20(sx);//
sxk=_IQ20(sx);//
t1=srj-srk;
t2=sxj-sxk;
//t1=sr-sr;t2=sx-sx;
srj=srj+srk;
sxj=sxj+sxk;
//sr+=sr;sx+=sx;
srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
//sr=c*t1-s*t2;sx=s*t1+c*t2;
sr=_IQ20toF(srk);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxk);
sx=_IQ20toF(sxj);
}
}
cv=ct;
ct=_IQ20mpy(_IQ20(2.0),_IQ20mpy(ct,ct))-_IQ20(1.0);
st=_IQ20mpy(_IQ20(2.0),_IQ20mpy(st,cv));
//ct=2.0*ct*ct-1.0;st=2.0*st*cv;
}
if(m0>=2)
for(li=0;li<np;li+=4)
{
j=li;k=j+2;
srj=_IQ20(sr);//dingyi
srk=_IQ20(sr);//
sxj=_IQ20(sx);//
sxk=_IQ20(sx);//
t1=srj-srk;
t2=sxj-sxk;
//t1=sr-sr;t2=sx-sx;
srj=srj+srk;
sxj=sxj+sxk;
srk=t1;
sxk=t2;
sr=_IQ20toF(srk);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxk);
sx=_IQ20toF(sxj);
//sr+=sr;
//sx+=sx;
//sr=t1;sx=t2;
++j;++k;
srj=_IQ20(sr);//dingyi
srk=_IQ20(sr);//
sxj=_IQ20(sx);//
sxk=_IQ20(sx);//
t1=srj-srk;
t2=sxj-sxk;
srj=srj+srk;
sxj=sxj+sxk;
srk=_IQ20mpy(_IQ20(inv),t2);
sxk=_IQ20mpy(_IQ20(-inv),t1);
//t1=sr-sr;t2=sx-sx;
//sr+=sr;sx+=sx;
//sr=inv*t2;sx=-inv*t1;
sr=_IQ20toF(srk);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxk);
sx=_IQ20toF(sxj);
}
for(li=0;li<np;li+=2)
{
j=li;k=j+1;
srj=_IQ20(sr);//dingyi
srk=_IQ20(sr);//
sxj=_IQ20(sx);//
sxk=_IQ20(sx);//
t1=srj-srk;
t2=sxj-sxk;
srj=srj+srk;
sxj=sxj+sxk;
srk=t1;
sxk=t2;
//t1=sr-sr;t2=sx-sx;
//sr+=sr;sx+=sx;
//sr=t1;sx=t2;
sr=_IQ20toF(srk);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxk);
sx=_IQ20toF(sxj);
}
lmx=np/2;j=0;
for(i=1;i<np-1;++i)
{
k=lmx;
while(k<=j)
{
j-=k;k/=2;
}
j+=k;
if(i<j)
{
//t1=sr;sr=sr;sr=t1;
//t1=sx;sx=sx;sx=t1;
srj=_IQ20(sr);//dingyi
sri=_IQ20(sr);//sri 记得定义!!!
sxj=_IQ20(sx);//
sxi=_IQ20(sx);
t1=srj;srj=sri;sri=t1;
t1=sxj;sxj=sxi;sxi=t1;
sr=_IQ20toF(sri);
sr=_IQ20toF(srj);
sx=_IQ20toF(sxi);
sx=_IQ20toF(sxj);
}
}
if(inv!=-1)
return;
//t1=1.0/np;
t1=_IQ20div(_IQ20(1.0),_IQ20(np));
for(i=0;i<np;++i)
{
sri=_IQ20(sr);
sxi=_IQ20(sx);
sri=_IQ20mpy(sri,t1);
sxi=_IQ20mpy(sxi,t1);
//sr*=t1;sx*=t1;
sr=_IQ20toF(sri);
sx=_IQ20toF(sxi);
}
}
是不是堆栈空间太小? JY-DX-JY 发表于 2015-1-4 11:03 static/image/common/back.gif
是不是堆栈空间太小?
没用到堆栈啊貌似,如果堆栈地址过小引起的是对什么而言堆栈过小,我写的程序所需要的运行空间太大28027无法满足吗 是不是堆栈空间太小? 顶上去,有没有人知道原因 你是单步执行的吗?执行到此处,点击进入函数。 海中水 发表于 2015-1-6 09:34 static/image/common/back.gif
你是单步执行的吗?执行到此处,点击进入函数。
什么叫点击进入函数 估计你没有单步调试,单步执行不可能不可能出现这样的情况,非单步执行就很正常了 在fft那一行设断点,停不下来吗?要是不行,会不会是被编译器优化掉了?把编译优化的选项全部取消试试先。
mengheli 发表于 2015-1-16 13:53 static/image/common/back.gif
什么叫点击进入函数
单步执行到哪一行或者前一行的时候,在调试里面有一个进入函数选项。 海中水 发表于 2015-1-19 09:18 static/image/common/back.gif
单步执行到哪一行或者前一行的时候,在调试里面有一个进入函数选项。
原因好像是这个函数太长了,如果注释掉一部分,就可以正常调用了,是因为28027这个芯片不行吗,可是我还要用这个程序,有什么解决办法 mengheli 发表于 2015-1-22 12:28 static/image/common/back.gif
原因好像是这个函数太长了,如果注释掉一部分,就可以正常调用了,是因为28027这个芯片不行吗,可是我还 ...
有这种状况吗?不应该的,函数调用的时候参数不要定义太多。哈有就是中断的时候的时候一般不要调用函数,其他的就没有什么要求的。应该不是这方面的问题。可以再仔细分析一下。
页:
[1]