首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
TMS320C6000嵌入式系统优化编程的研究
来源:本站整理  作者:佚名  2009-03-19 11:26:49



下面例子是算法中计算帧能量的函数,其中包含两个单循环体。进行优化时,首先要确定循环的次数。对于循环次数是变量的情况,优化器不进行并行优化;其次尽量减少数据存取次数,例如以32位存取指令对16位数据进行存取,可以节省一半的存取周期。仔细观察C代码,会发现两次循环次数相同。第二个循环要用到第一个循环的结果,因此可以将两个循环合并在一起,这样就避免了在第二个循环中再从存储器中取结果,减少了一半的Load操作。

  long   Comp_En( short *Dpnt)

    {  int   i ;

      long   Rez ;

      short   Temp[60] ;                 

      for ( i = 0 ; i < 60 ; i ++)

          Temp[i] = shr( Dpnt[i], (short) 2) ;

      Rez=(long) 0 ;

      for (i=0; i <60; i ++)

         Rez=L_mac(Rez, Temp[i], Temp[i]);

      return Rez ;

  }

    相应的线性汇编程序如下:

  .global _Comp_En          ;函数名定义,对c变量前加__Comp_En .cproc  Dpnt;函数头定义,Dpnt是参数

  .reg Rez,Rez1,Rez2,I   ;寄存器定义,不必考虑实际的寄存器分配

  .reg t1,t2,x1,c1,m1,m2

    zero Rez

    zero Rez1

    zero Rez2

    mv  Dpnt,c1

    mvk 30,i                 ;确定循环次数。因为用LDW代替LDH,循环次数减少一半。

loop1 .trip 30    

      ldw *c1++,x1

      shl x1,16,t1

      shr t1,2,t1

      shr x1,2,t2           ;将两个循环合在一起,又减少了一半的从内存取数据的时间。

      smpyh t1,t1,m1

      smpyh t2,t2,m2

      sadd Rez1,m1,Rez1

      sadd Rez2,m2,Rez2

      [i] sub i,1,i         ;循环计数器从30递减

      [i] b loop1              

      sadd Rez1,Rez2,Rez

    .return Rez

    .endproc        

    消耗时间(时钟周期):C语言为32971;线性汇编语言为93。

2.3 使用线性汇编改写复杂函数中的循环体

  当函数的逻辑关系复杂,判断、跳转、函数调用情况特别多时,上面方法的效果就会大打折扣。这时可以使用线性汇编将其中的循环部分改写成一个函数,以优化后的函数调用代替循环部分,而不是优化整个复杂函数。

  高速数字信号处理器件的应用范围越来越广,特别是在移动通信领域中,软件无线电、智能天线等新技术的实现都需要强大的实时数字信号处理的支持。TMS320C6000系列DSP完全可以满足此类要求。但目前对于并行DSP技术的软硬件开发还处在摸索阶段,如何充分利用高速DSP的资源,是这方面的研究重点。本文研究了最新推出的TMS320C6000的优化策略,从工程和系统的角度总结出一套既能满足实时性又能保证开发时效性的实用的优化编程方法,以供分飨。

上一页  [1] [2] [3]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:48,750.00000 毫秒