<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > XC166單片機(jī)的DSP程序優(yōu)化方法

          XC166單片機(jī)的DSP程序優(yōu)化方法

          作者: 時(shí)間:2010-09-16 來(lái)源:網(wǎng)絡(luò) 收藏

            的指令流水線存在著不可避免的阻塞現(xiàn)象,MAC單元指令也一樣。盡管在硬件設(shè)計(jì)時(shí)已經(jīng)采用了專(zhuān)用模塊來(lái)減少阻塞,但有些阻塞是不可避免的,從的角度來(lái)說(shuō),可以充分利用指令流水線阻塞現(xiàn)象,通過(guò)重排指令流水線上的指令,消除阻塞,以使得的運(yùn)行時(shí)間縮短,從而達(dá)到的目的。

          本文引用地址:http://www.ex-cimer.com/article/173217.htm

            通常可以分為兩類(lèi):一類(lèi)是與芯片相關(guān)的,另一類(lèi)是與芯片無(wú)關(guān)的。與芯片無(wú)關(guān)的優(yōu)化獨(dú)立于硬件,適用于所有處理器,下面根據(jù)使用單片機(jī)的經(jīng)驗(yàn)總結(jié)一些優(yōu)化。

            1 通用優(yōu)化方法

            1.1 數(shù)據(jù)組處理

            數(shù)據(jù)組處理的基本思想是通過(guò)成組的處理數(shù)據(jù),以節(jié)約每次調(diào)用處理子程序所需的附加指令。數(shù)據(jù)組處理可以在C語(yǔ)言或匯編語(yǔ)言程序中實(shí)現(xiàn)。一般而言,對(duì)于開(kāi)發(fā)DSP程序,最常用的程序語(yǔ)言為C和匯編。下面分別介紹如何在C和匯編程序中使用數(shù)據(jù)組處理優(yōu)化方法。

            (1)C程序

            在C環(huán)境中開(kāi)發(fā)DSP程序,通常算法本身由匯編編寫(xiě),以便優(yōu)化實(shí)現(xiàn)。C主程序通過(guò)調(diào)用匯編實(shí)現(xiàn)的核心處理子程序來(lái)完成對(duì)數(shù)據(jù)的處理。核心處理子程序有兩種實(shí)現(xiàn)方法,一種是數(shù)組處理,另一種是單值處理,假設(shè)單值處理子程序的核心部分與數(shù)組處理子程序的核心部分所需機(jī)器周期相同,并且調(diào)用子程序的前期處理需M個(gè)機(jī)器周期,后期處理需要N個(gè)機(jī)器周期,如果子程序被調(diào)用K次,那么理想情況下,數(shù)據(jù)組處理可以節(jié)約(K-1)(M+N)個(gè)機(jī)器周期,如圖1所示。

            


            (2)匯編程序

            在匯編程序中實(shí)現(xiàn)數(shù)據(jù)組處理有多種方法,比如數(shù)組操作,數(shù)組讀入/寫(xiě)出等。

            1、數(shù)組操作。數(shù)組操作是將多個(gè)不同的短操作數(shù)裝入一個(gè)長(zhǎng)位數(shù)的寄存器,然后進(jìn)行運(yùn)算操作。比如,1個(gè)16位的寄存器可以裝入2個(gè)8位的來(lái)自A/D轉(zhuǎn)換器的數(shù)據(jù)。下面舉例說(shuō)明數(shù)據(jù)組處理在匯編程序中的應(yīng)用。

            

            2、數(shù)組讀入寫(xiě)出。這種方法是將多個(gè)短操作數(shù)合并為一個(gè)長(zhǎng)操作數(shù)后進(jìn)行讀入/寫(xiě)出操作,如上面例子中的輸入/輸出部分。

            1.2 數(shù)據(jù)存儲(chǔ)器交織

            數(shù)據(jù)存儲(chǔ)器交織的目的是通過(guò)重新排列數(shù)據(jù)在存儲(chǔ)器中的位置,以使得程序讀寫(xiě)數(shù)據(jù)的時(shí)間最短,比如有2個(gè)8位的復(fù)數(shù)x和y,一般情況下,復(fù)數(shù)將按下列順序存入內(nèi)存:real(x),image(x),real(y),image(y)。但如果想使得讀取復(fù)數(shù)的實(shí)部更容易,可以把數(shù)據(jù)重新排列如下:real(x),real(y),image(x),image(y),如圖2所示。

            

            1.3 循環(huán)展開(kāi)

            循環(huán)展開(kāi)是一種非常傳統(tǒng)的程序優(yōu)化方法,可以用于所有程序優(yōu)化中,循環(huán)展開(kāi)的目的是通過(guò)重復(fù)循環(huán)中的程序,減少循環(huán)次數(shù),從而減少循環(huán)判斷指令的執(zhí)行次數(shù),以此來(lái)降低程序執(zhí)行所需的機(jī)器周期,下面舉一個(gè)例子來(lái)說(shuō)明循環(huán)展開(kāi)在XC164CS單片機(jī)中的應(yīng)用。

            


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();