TI中文支持网
TI专业的中文技术问题搜集分享网站

为什么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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

Jay:

你好,

你看下工程属性,是不是开了优化,再看一下优化等级。

怀疑是被优化掉了,你把优化关掉后再试试。

在调用语句的时候不会进入函数,直接进行下一条语句
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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

user4242688:

回复 Jay:

请问如何关掉优化,有人说是堆栈太小的原因,这个如何解决

在调用语句的时候不会进入函数,直接进行下一条语句
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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

Jay:

回复 user4242688:

优化配置在工程的属性页的Compiler下面。

在调用语句的时候不会进入函数,直接进行下一条语句
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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

HH Y:

是不是按钮没按对。逐步执行的按钮有二个,一个step into,一个step over,如果是按step over,函数是不会进入的,必须按step into

在调用语句的时候不会进入函数,直接进行下一条语句
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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

Joey Mao:

回复 HH Y:

step over 就是指执行不进入函数,直接执行完毕;step into是指进入函数

在调用语句的时候不会进入函数,直接进行下一条语句
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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

user4242688:

回复 HH Y:

应该是没有按错,因为我之前的函数都是正常执行的

在调用语句的时候不会进入函数,直接进行下一条语句
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[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        srk=t1;
                        sxk=t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_IQ20toF(sxj);

                        //sr[j]+=sr[k];sx[j]+=sx[k];sr[k]=t1;sx[k]=t2;
                        ++j;++k;
                        srj=_IQ20(sr[j]);//dingyi
                        srk=_IQ20(sr[k]);//
                        sxj=_IQ20(sx[j]);//
                        sxk=_IQ20(sx[k]);//
                        t1=srj-srk;
                        t2=sxj-sxk;
                        //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                        srj=srj+srk;
                        sxj=sxj+sxk;
                        //sr[j]+=sr[k];sx[j]+=sx[k];
                        srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                        sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                        //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                        sr[k]=_IQ20toF(srk);
                        sr[j]=_IQ20toF(srj);
                        sx[k]=_IQ20toF(sxk);
                        sx[j]=_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[j]);//dingyi
                                srk=_IQ20(sr[k]);//
                                sxj=_IQ20(sx[j]);//
                                sxk=_IQ20(sx[k]);//
                                t1=srj-srk;
                                t2=sxj-sxk;
                                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                                srj=srj+srk;
                                sxj=sxj+sxk;
                                //sr[j]+=sr[k];sx[j]+=sx[k];
                                srk=_IQ20mpy(c,t1)-_IQ20mpy(s,t2);
                                sxk=_IQ20mpy(s,t1)+_IQ20mpy(c,t2);
                                //sr[k]=c*t1-s*t2;sx[k]=s*t1+c*t2;
                                sr[k]=_IQ20toF(srk);
                                sr[j]=_IQ20toF(srj);
                                sx[k]=_IQ20toF(sxk);
                                sx[j]=_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[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
                //sr[j]+=sr[k];
                //sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                ++j;++k;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=_IQ20mpy(_IQ20(inv),t2);
                sxk=_IQ20mpy(_IQ20(-inv),t1);
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=inv*t2;sx[k]=-inv*t1;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_IQ20toF(sxj);
        }

        for(li=0;li<np;li+=2)
        {
                j=li;k=j+1;
                srj=_IQ20(sr[j]);//dingyi
                srk=_IQ20(sr[k]);//
                sxj=_IQ20(sx[j]);//
                sxk=_IQ20(sx[k]);//
                t1=srj-srk;
                t2=sxj-sxk;
                srj=srj+srk;
                sxj=sxj+sxk;
                srk=t1;
                sxk=t2;
                //t1=sr[j]-sr[k];t2=sx[j]-sx[k];
                //sr[j]+=sr[k];sx[j]+=sx[k];
                //sr[k]=t1;sx[k]=t2;
                sr[k]=_IQ20toF(srk);
                sr[j]=_IQ20toF(srj);
                sx[k]=_IQ20toF(sxk);
                sx[j]=_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[j];sr[j]=sr[i];sr[i]=t1;
                        //t1=sx[j];sx[j]=sx[i];sx[i]=t1;

                        srj=_IQ20(sr[j]);//dingyi
                        sri=_IQ20(sr[i]);//sri 记得定义!!!
                        sxj=_IQ20(sx[j]);//
                        sxi=_IQ20(sx[i]);
                t1=srj;srj=sri;sri=t1;
                t1=sxj;sxj=sxi;sxi=t1;
                sr[i]=_IQ20toF(sri);
                sr[j]=_IQ20toF(srj);
                sx[i]=_IQ20toF(sxi);
                sx[j]=_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[i]);
                sxi=_IQ20(sx[i]);
                sri=_IQ20mpy(sri,t1);
                sxi=_IQ20mpy(sxi,t1);
                //sr[i]*=t1;sx[i]*=t1;
                sr[i]=_IQ20toF(sri);
                sx[i]=_IQ20toF(sxi);
        }

}

user4242688:

回复 Joey Mao:

应该是没有按错,因为我之前的函数都是正常执行的

赞(0)
未经允许不得转载:TI中文支持网 » 为什么28027会跳过函数执行下一条语句
分享到: 更多 (0)