微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > 为什么28027会跳过函数执行下一条语句

为什么28027会跳过函数执行下一条语句

时间:10-02 整理:3721RD 点击:

在调用语句的时候不会进入函数,直接进行下一条语句
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);
        }

}

这个问题可以转一下C2000版块的工程师

你好,可以下载个FFT的例程对比下,怀疑是否还需要用#include 定义下,谢谢。

28027没有FFT的例程

你好,28035或者28335有没有类似例程,道理一样的,我估计你是缺少些什么东西,头文件或者定义什么的,谢谢。

您好,您换个函数名试下?或者一个可以执行的空函数,然后将FFT代码移到这个空函数里。

你好,很久以前用的C2000基本忘记了,建议去C2000板块去确认下结果,谢谢。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top